98 - 'Address already in use'

Pavel PaJaSoft Janousek janousek na fonet.cz
Pátek Září 3 13:04:39 CEST 1999


	Zajimavy nazor, bohuzel moje zkusenosti rikaji neco jineho:

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

	Tady neni co dodat, snad kazdy zna tuto zakladni poucku...

> 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..

	A v kterem RFC je shodit takovyto port po 60 sekundach (nekdy mam
pocit, ze je to 90s)? Rozhodne ne v puvodni specifikaci, jak rikam, cetl
jsem, ze puvodni specifikace TCP s timto stavem vubec nepocita...

> Da sa tomu pomoct aj inak, trosku skaredsie, cez setsockopt(sock,
> SOL_SOCKET,SO_REUSEADDR, &i), i musi byt 1, neviem naisto, pisem to

	SO_REUSEADDR jsem zkousel, dokonce i jine Options (dle p. Stevense,
velmi dobra kniha), bohuzel nepomohlo to, bind se stejne vratil s
chybou....

> 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.

	Problem se objevuje hlavne kdyz ladim aplikaci - kdyz mam aplikaci v
debuggeru a ona slitne s coredumpem (debugger zachyti) nebo ja ukoncim
ladeni protoze jsem objevil principielni bug v mych source, ze je nutny
novy preklad (nekdy se stalo, ze jsem nesmel dal pokracovat, protoze
bych si poskodil nektera data), tak jsem pak musel vzdy cekat...
vyplatilo se mi u serveru pri ladeni necekat na presnem portu, ale
nechat si pridelit prvni volny, cislo si vypsat a klientovi to sdelit na
prikazove radce, sice Linux registroval nekdy i par desitek FIN_WAIT2
pouzitych portu, ale tech 30k jsem nevyuzil, takze postupne zase
mizeli...;-). Nekdy vsak, hlavne pokud si obe strany mohutne kecaji a
jedna pred vyzvednutim vsech dat da close, druha na to reaguje okamzitym
uvolnenim portu bez odeslani potvrzeni o zaveseni (napr. Win95)

--------------------------------------------------------------------------
Ing. Pavel Janousek (PaJaSoft)                    FoNet, spol. s r. o.
Vyvoj software, sprava siti, Unix, Web, Y2K     Anenska 11, 602 00  Brno
E-mail: mailto:Janousek na FoNet.Cz                Tel.: +420  5  4324 4749
SMS:    mailto:P.Janousek na SMS.Paegas.Cz         Fax.: +420  5  4324 4751
WWW:    http://WWW.FoNet.Cz/                  E-mail:
mailto:Info na FoNet.Cz
--------------------------------------------------------------------------


Další informace o konferenci Linux