Dave, The Apple way to solve this problem is to use Bonjour with a dynamic port assignment. Just use port zero, and set Bonjour to true like so: <key>Sockets</key> <dict> <key>Listeners</key> <dict> <key>Bonjour</key> <true/> <key>SockServiceName</key> <string>0</string> </dict> </dict> davez On May 22, 2008, at 11:38 AM, Dave Dribin wrote:
Hello,
I'm writing a launchd agent that opens a TCP listening socket. Ideally, I'd like launchd to open and listen to the socket via SockServiceName so my agent only gets launched as-needed.
The problem is I'd like to listen to the same port (e.g. 12345), no matter which user is logged in. This is fine when there's only one user logged in, but as soon as fast user switching comes into play, the socket gets an "address already in use" when the second user logs in.
This is to be expected, I suppose. But is there any way to have launchd only listen to the socket when the user is the "active" user, and have it *not* listen when the user gets switched out, due to fast user switching?
At first glance the LimitLoadToSessionType looked promising, but it doesn't look like any of those will do that.
The solution I'm currently entertaining uses launchd to always launch my agent, and have my agent do the socket listening. I can then use the user switch notification to close down the listening port when the session is deactivated and open it when activated.
Thanks,
-Dave
_______________________________________________ launchd-dev mailing list launchd-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/launchd-dev