98 - 'Address already in use'

Milan Pikula - WWW www na fornax.elf.stuba.sk
Čtvrtek Září 2 14:06:52 CEST 1999


On Thu, 2 Sep 1999, Petr Snajdr wrote:

W>Dobry den,
W>   obcas se mis tava, ze kdyz jsem nucen killnout
W>nejakeho daemona tak pri jeho opetovnem
W>spusteni se mu nepodari bidnout TCP port:
W> (98, 'Address already in use').
W>To vsak neni pravda a situace trva i desitky
W>sekund. Pak vse zacne fungovat jak ma.
W>Jak lze ovlivnit tento timeout ? Jde
W>to ovlivnit v src. programu?

TCP spojenie je jednoznacne dane 4 cislami:
	zdrojova adresa, zdrojovy port
	cielova adresa, cielovy port

Problem nastane, ak niektora strana zabudne, ktore cisla su uz alokovane,
ale nezrusi vsetky TCP spojenia suvisiace s danym portom. (napriklad na
jednej strane niekto stlaci vypinac.) To moze viest k tomu, ze sa lokalna
dvojica "adresa:port" prideli dalsiemu vznikajucemu spojeniu a data sa s
urcitou pravdepodobnostou (zavisi od cisel v TCP hlavicke) pomiesaju.

Sietovy kod to riesi tak, ze ak nebol socket, na ktory bol aplikovany
listen() a vsetky ostatne sockety, vlastniace ten isty par "ip:port"
korektne zrusene (pre bezne spojenia to znamena "shutdown(sock,2);"),
pri pokuse zavesit sa na ten isty port to caka, nieco vyse 60 sekund..

Da sa tomu pomoct aj inak, trosku skaredsie, cez setsockopt(sock,
SOL_SOCKET,SO_REUSEADDR, &i), i musi byt 1, neviem naisto, pisem to
z hlavy. Toto treba aplikovat na socket po jeho vytvoreni, pred
zavesenim na port.

ps1 - vzdy som si myslel, ze je to vykonstruovany problem a v praxi
by nemal nastat. na moje velke zacudovanie som sa s nim stretol, ked
sme robili implementaciu TCP/IP na spectre - v niektorom RFC sa pise
aj preco je to zhruba minuta; predpoklada sa, ze za tu dobu vsetky
pakety zo stareho spojenia vyhynu.

ps2 - klamal som, nie je to pri KAZDOM pokuse zavesit sa na ten isty
port, podrobnejsi pokec je v poznamke v /usr/src/linux/include/net/tcp.h.

W>------------------------------------------------------
W>Zacit se dnes ucit Perl je jako koupit si listek na Titanic
^^^^- preco? je to dost vykonna vec a ja ho aj dnes pouzicvam dost casto..


s pozdravom,
	Milan Pikula

--
Milan Pikula, WWW. Finger me for Geek Code.
http://fornax.elf.stuba.sk/~www, www na fornax.elf.stuba.sk
.. dajte mi pevnu linku a pohnem zemegulou ..





Další informace o konferenci Linux