Allgemeine Frage zu shutdown(2)

16/04/2008 - 15:16 von Daniel Kruge | Report spam
Hallo NG!

Ich würde mal gerne wissen, in welchem Fall man Files (int-
Filedescriptoren) mit shutdown vor dem Schließen 'abriegeln' muss.
Gerade habe ich gemerkt, dass sich ein Server-Socket (mit socket(2)/bind
(2)/listen(2) auf meiner IP geöffnet), nach dem Erstellen und darauf
folgendem Schließen (mit einfachem close(2)) für einige zeit
'blockiert' scheint (das verwendete TCP-Port làsst sich erst einige
Minuten spàter wieder verwenden). Wenn ich es allerdings vorher mit
shutdown(meinSocket, SHUT_RDWR) bearbeite, tritt dieses Problem nicht
auf.

Meine Frage nun: Bei welchen Zugriffsmethoden muss ich nun dieses
shutdown aufrufen um den Filedescriptor SAUBER zu schließen?


Lg, DK
 

Lesen sie die antworten

#1 Rainer Weikusat
16/04/2008 - 15:24 | Warnen spam
Daniel Kruge writes:
Ich würde mal gerne wissen, in welchem Fall man Files (int-
Filedescriptoren) mit shutdown vor dem Schließen 'abriegeln' muss.



'Muessen' muss man das gar nicht. Man _kann_ shutdown benutzen, wenn
man der Gegenstelle eine Abbau der TCP-Verbindung signalisieren
moechte, ohne direkt den Deskriptor zu schliessen (zB, weil man ein
FIN schicken moechte, dh keine Daten mehr senden wird, aber noch
welche empfangen will).

Gerade habe ich gemerkt, dass sich ein Server-Socket (mit socket(2)/bind
(2)/listen(2) auf meiner IP geöffnet), nach dem Erstellen und darauf
folgendem Schließen (mit einfachem close(2)) für einige zeit
'blockiert' scheint (das verwendete TCP-Port làsst sich erst einige
Minuten spàter wieder verwenden).



Das ist ein normaler Effekt eines TCP-close ('TIME-WAIT'-Zustand). Das
'Gegenmittel' ist normalerweise setsockopt mit den Optionen
SO_REUSEADDR oder SO_REUSEPORT.

Ähnliche fragen