[ 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