On Sun, Sep 12, 2004 at 02:18:14PM +0200, Arnaud Burlet wrote:
> Dans ce cas, une table de question est n�cessaire uniquement si les requ�tes 
> se font par UDP (ce qui est le cas si je me souviens bien de ce fil de 
> discussion) ?

Ca d�pend. Le client (BIND) peut aussi g�rer plusieurs questions via TCP
en parall�le sur un ou plusieurs serveurs BIND.  Il peut le faire soit
via des threads (nouveau), ou classiquement via select() et une table
de questions, ou une combinaison des deux.  jJ n'ai pas regard� la
source.

> La page socket(7) n'est pas comp�tement claire par rapport � ce cas, mais j'ai 
> essayer de faire 2 socket() TCP puis sur chacune des bind() sur un meme tuple 
> (port local, adresse locale), le bind() fonctionne pour les 2 socket. C'est 
> le second connect() qui �choue...

Si je fais:

   xterm1% netcat -p 5555 -l
   xterm2% netcat -p 1024 localhost 5555
   xterm3% netstat -n | grep 5555
   tcp        0      0 127.0.0.1:5555          127.0.0.1:1024 ESTABLISHED 
   tcp        0      0 127.0.0.1:1024          127.0.0.1:5555 ESTABLISHED
   xterm3% netcat -p 1024 192.168.1.1 22
   <blabla>
   xterm4% netstat -an | grep 1024
   tcp        0      0 192.168.1.168:1024      192.168.1.1:22 ESTABLISHED 
   tcp        0      0 127.0.0.1:5555          127.0.0.1:1024 ESTABLISHED 
   tcp        0      0 127.0.0.1:1024          127.0.0.1:5555 ESTABLISHED 

et maintenant:
   xterm4% netcat -p 1024 192.168.1.1 25
   xterm5% netstat -an | grep 1024
   tcp        0      0 192.168.1.168:1024      192.168.1.1:22 ESTABLISHED 
   tcp        0      0 127.0.0.1:5555          127.0.0.1:1024 ESTABLISHED 
   tcp        0      0 127.0.0.1:1024          127.0.0.1:5555 ESTABLISHED 
   tcp        0      0 192.168.1.168:1024      192.168.1.1:25 ESTABLISHED 

et enfin:
   xterm5% netcat -p 1024 192.168.1.1 25

j'obtiens:

   connect(3, {sin_family=AF_INET, sin_port=htons(25), 
sin_addr=inet_addr("192.168.1.1")}}, 16) = -1 EADDRNOTAVAIL (Cannot assign requested 
address)

Donc, effectivement, j'ai eu tort. Un client peut bind(2)er sur le m�me
num�ro de socket, voire la m�me adresse IP, tant que le tuple
(port local, port distant, adresse locale, adresse distante) est unique
pour TCP.

L'erreur se fait au connect(2) car le tuple n'est compl�tement connu que
l�.

D'ailleurs, avec SO_REUSEADDR plusieurs serveurs peuvent �couter sur le
m�me socket (un est activ� � chaque nouvelle connexion, dans un ordre � supposer
al�atoire).


_______________________________________________
gull mailing list
[EMAIL PROTECTED]
http://lists.alphanet.ch/mailman/listinfo/gull

Répondre à