-
Transmettre un socket
Bonjour,
Je cherche à faire un programme qui écoute sur plusieurs port et qui après réception d'un message sur un des ports, lance un programme comme un serveur Web qui écoute sur ce port.
Mon problème est que : Mon programme fait un bind sur le port X, recoit un flux donc il lance le serveur web (jusque la tout va bien) mais ce dernier cherche lui aussi à faire un bind sur le port X et donc ne se lance pas.
Je voudrai donc "Transmettre" mon socket au serveur web par exemple.
Mais je ne trouve pas de solution pour l'instant, donc je me dirige vers vous.
Merci d'avance
-
Tu peux toujours utiliser setsockopt avec l'argument SO_REUSEADDR mais son utilisation est délicate. Bien lire la doc sur son sujet. Le mieux, c'est toujours de n'avoir qu'un seul programme à l'écoute par port.
-
ok ok je m'en sert déjà car j'ai fait un programme qui ferme son socket et qui le libere donc pour le serveur web.
Mais je vais m'y intéresser pour voir comment l'utiliser pour transmettre le socket.
Merci beaucoup pour la rapidité et passez une bonne journée
-
Sous unix, la technique classique est de passer le socket comme stdout et stdin au sous-process. Toujours sous unix, regarde (x)inetd avant de reinventer la roue. Et il y a souvent moyen de passer des file-descriptors (ce que sont les sockets) d'un process a l'autre (voir chez Stevens, j'ai jamais utilise).
En passant, fermer le socket va couper la connection. Oui, un autre process pourra la rouvrir, mais le modele me semble bizarre du point de vue du client.
-
merci beaucoup
je vais effectivement éplucher le code de inetd.
Par contre vous faites référence à Stevens et je ne vois pas à quoi ca correspond.
quote/(voir chez Stevens, j'ai jamais utilise)./quote
Encore merci
-
Stevens est un auteur et aussi une référence dans le monde des socket unix. Il a beaucoup écrit : http://www.kohala.com/start/
-
merci beaucoup à tout les deux.