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