Fonctionnement launchd et sockets

Sékiltoyai

Membre confirmé
9 Août 2007
61
2
38
Le Havre / Rennes
Bonjour,

Je développe actuellement un serveur en c et sockets. Le serveur lancé normalement, l'écoute et l'acceptation des clients se fait sans problèmes. Seulement je voudrais pouvoir utiliser launchd pour lancer mon démon à la demande. Ainsi j'ai fait le .plist dûment :
Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Debug</key>
	<true/>
	<key>Label</key>
	<string>com.apple.dipsid</string>
	<key>OnDemand</key>
	<true/>
	<key>ProgramArguments</key>
	<array>
		<string>/Users/sekil/Projects/etude_srv/build/Debug/test</string>
		<string>3003</string>
	</array>
	<key>Sockets</key>
	<dict>
		<key>ServerPort</key>
		<dict>
			<key>SockServiceName</key>
			<string>3003</string>
		</dict>
	</dict>
	<key>UserName</key>
	<string>dipsi</string>
</dict>
</plist>

Je charge le démon par launchctl. Quand je me connecte, pas de problème, le serveur est bien lancé, mais, bien entendu, le port est pris. J'ai vite conjecturé que le port avait été directement bindé par launchd et que je ne pourrais pas accepter la connexion en écoutant sur le port choisi.

J'ai recherché un peu dans la documentation, des exemples, et bien entendu le man (très mal documenté il faut dire), activé la compatibilité xinetd pour tester, j'ai aussi recherché sur internet comment fonctionne xinetd, en vain. Rien à faire, je ne vois pas comment est ce que je peux récupérer la connexion dans mon programme.

Est ce que quelqu'un pourrait éclairer ma lanterne ? Comment est ce que fonctionne launchd et les sockets ? Je suis très intéressé par une documentation complète ou à la rigueur un cours ou tutoriel sur le sujet.

Merci de vos réponses.