[ LUGOS ] so_reuseaddr problem
Uros Podkriznik
urosp na kid.kibla.org
Tor Jun 27 09:12:31 CEST 2000
On Tue, 27 Jun 2000, Darko Koruga wrote:
> On Mon, Jun 26 2000, Uros Podkriznik wrote:
>
> >
> > Zanimalo me je ce so_reuseaddr socket option zares deluje...
> > Testiral sem s sock programom.
> >
> > sock -A -s port # -A -> uporabi SO_REUSEADDR
> > # -s -> server
> > sock -A -s 127.0.0.1 port
> >
> > Pri ta zadnjem sem dobil address already in use error. Vse skupaj sem
> > poskusil na FreeBSD in tam je stvar delovala. V cem je problem?
> >
> Seveda da deluje samo ti zadevo pomoje narobe razumes. Ideja
> SO_REUSEADDR je v tem da deluje v kombinaciji z listen() in
> accept(). Svetujem da pogledas kako deluje katerikoli daemon
> ki poslusa na TCP/IP portu. Za tisti tvoj poskus s sock
> programom je pa tako da ko s close() zapres socket nekateri
> operacijski sistemi port se nekaj casa drzijo v stanju
> CLOSE_WAIT in ga spet lahko uporabis sele ko pretece dolocen
> cas. Ponavadi se to zgodi ce program nasilno prekines (kill -9)
> in ne more lepo pocistiti za sabo.
>
> Lp, Darko
Hi
Zadevo sem ze resil. Problem je v tem da linux vrne EADDRINUSE kadar
predtem naredis bind() z INADDR_ANY (?? lahko to kdo potrdi/razlozi).
Torej stvar deluje ce naredim:
sock -A -s 127.0.0.1 port # -s za server -A za SO_REUSEADDR
# in potem
sock -A -s 192.168.50.3 port
# vendar ce probam
sock -A -s port # bind server to INADDR_ANY
# dobim: error: address already in use
Zanimivo je da ta zadnje pod FreeBsd deluje.
Uros
Dodatne informacije o seznamu Starilist