PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : temporär: cannot bind socket



stefan-tiger
01.06.07, 16:55
Hallo,

habe zwei kleine Prorgamme, ein Server ein Client, programmiert.

Funktioniert im Grunde ganz gut bis auf einen kleinen Haken:

Wird das Serverprogramm beendet und ich möchte es gleichwieder starten, dann kann es den socket nichtmehr binden.

Warte ich eine weile (10-20sek) startet das Programm wieder einwandfrei.

Im Serverprogramm wird der Serversocket ordnungsgemäß am Ende per close() geschlossen.

Diozaka
01.06.07, 17:12
Das liegt am TIME_WAIT-Timeout, siehe dazu [1]. Um das Problem zu umgehen kannst du dem Programm sagen, dass es den Socket vor dem Timeout schon wieder benutzen darf. In etwa so:



int on = 1;
int status = setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on));
if (status < 0) {
/* Fehler */
}


MfG, Diozaka

[1] http://hea-www.harvard.edu/~fine/Tech/addrinuse.html

stefan-tiger
01.06.07, 17:42
Danke, das wars :)