Socket en C, lancer le serveur sur 2 ports

Socket en C, lancer le serveur sur 2 ports - C - Programmation

Marsh Posté le 05-06-2005 à 12:36:20    

Bonjour,
 
Je viens de créer un petit serveur http gérant les requetes GET et POST.
J'aimerais maintenant lancer ce serveur sur 2 ports à la fois. genre 4444 et 4445
Dans mon while j'ai un ns=accept(sd,(struct sockaddr*)&clientaddr, &sasize);
sd étant mon socket, si je créé un autre socket sur un autre port comment peut on gérer le accept() avec les 2 sockets.
 
 
 
 
 
 

Reply

Marsh Posté le 05-06-2005 à 12:36:20   

Reply

Marsh Posté le 05-06-2005 à 12:44:06    

bah tu peux mettre simplement un interrupteur qui change de sens à chaque boucle. En fonction de celui-ci tu choisis de faire un accept sur l'une ou l'autre socket. MAIS étant donné que accept est bloquant cela va poser des problèmes. Si tu attends sur une socket et que y'a personne et bah meme si y'a qqun sur l'autre et bah il l'aura dans le baba

Reply

Marsh Posté le 05-06-2005 à 12:53:11    

faire une boucle avec 2 select non-bloquant

Reply

Marsh Posté le 05-06-2005 à 15:40:06    

bb007 a écrit :

Je viens de créer un petit serveur http gérant les requetes GET et POST.
J'aimerais maintenant lancer ce serveur sur 2 ports à la fois. genre 4444 et 4445
Dans mon while j'ai un ns=accept(sd,(struct sockaddr*)&clientaddr, &sasize);
sd étant mon socket, si je créé un autre socket sur un autre port comment peut on gérer le accept() avec les 2 sockets.


select() est ton ami.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 05-06-2005 à 15:40:37    

cricri_ a écrit :

faire une boucle avec 2 select non-bloquant


Pourquoi ? 1 seul select() bloquant suffit. Le premier parametre de select, c'est pas un fd. C'est le numero de fd max...


Message édité par Emmanuel Delahaye le 05-06-2005 à 15:44:40

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 05-06-2005 à 15:43:18    

fafounet a écrit :

bah tu peux mettre simplement un interrupteur qui change de sens à chaque boucle. En fonction de celui-ci tu choisis de faire un accept sur l'une ou l'autre socket. MAIS étant donné que accept est bloquant cela va poser des problèmes. Si tu attends sur une socket et que y'a personne et bah meme si y'a qqun sur l'autre et bah il l'aura dans le baba


Mais non accept() n'est pas bloquant. C'est de la config. On appelle accept() autant de fois que nécessaire pour préciser les ports entrants autorisés, et ensuite, on fait une boucle classique avec select().


accept(port x)
accept(port y)
DO
   select()
FOREVER


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 05-06-2005 à 19:29:08    

Emmanuel Delahaye a écrit :

Pourquoi ? 1 seul select() bloquant suffit. Le premier parametre de select, c'est pas un fd. C'est le numero de fd max...


Oups !! exact Maître Emmanuel ... ;)

Reply

Marsh Posté le 10-06-2005 à 09:57:21    

Emmanuel Delahaye a écrit :

Mais non accept() n'est pas bloquant. C'est de la config. On appelle accept() autant de fois que nécessaire pour préciser les ports entrants autorisés, et ensuite, on fait une boucle classique avec select().


accept(port x)
accept(port y)
DO
   select()
FOREVER



 
Tu dois confondre avec listen() non ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed