TCP und POSIX Sockets accept () Semantik

8

Situation: Der Server ruft accept () auf. Der Client sendet ein SYN an den Server. Der Server erhält das SYN und sendet dann ein SYN / ACK zurück an den Client. Der Client legt jedoch jetzt auf / stirbt, sodass es nie wieder einen ACK an den Server sendet.

Was passiert? Gibt accept () zurück, sobald es das SYN empfängt, oder blockiert es, bis die ACK des Clients zurückgegeben wird? Wenn es blockiert, gibt es schließlich eine Zeitüberschreitung?

    
Claudiu 01.04.2009, 18:45
quelle

4 Antworten

9

Der Aufruf von accept() blockiert, bis eine Verbindung besteht. Solange und bis der 3-Wege-Handshake abgeschlossen ist, ist keine Verbindung , daher sollte accept() nicht zurückkehren. Für nicht blockierende Sockets wird es nicht blockiert, aber es gibt auch keine Informationen über teilweise abgeschlossene Handshakes.

    
dwc 02.04.2009, 00:47
quelle
2

Wenn der Client niemals einen ACK sendet, wird accept () EAGAIN entweder blockieren oder zurückgeben, wenn der Socket als nicht blockierend markiert ist.

    
sigjuice 01.04.2009 18:54
quelle
1

Es wird eventuell eine Zeitüberschreitung auftreten, da dieses Szenario tatsächlich einem DoS (Denial of Service) und der Ressource für das Akzeptieren zur Verwendung durch das Betriebssystem gegenübersteht. Dies kann dazu führen, dass der Master-Socket blockiert wird, da der Client mit dem Server verbunden ist, sobald das Akzeptieren mit einem gültigen Datei-Deskriptor

zurückkehrt

Falls während der Verbindung vom Client ein Fehler auftritt, wird der Wert errno gesetzt und eine gute Idee wäre das Protokoll oder die Anzeige einer Fehlermeldung. aber lesen Sie die man-Seiten, es ist die beste Informationsquelle in den meisten Fällen.

    
biosFF 01.04.2009 18:54
quelle
0

Wenn es einen Fehler gibt, sagen wir, ein Timeout, weil ein Handshake nicht abgeschlossen wird, wird -1 zurückgegeben und errno gesetzt. Ich glaube, nachdem ich auf die man-Seite geschaut habe, wird es auf ECONNABORTED errno gesetzt.

    
fido 02.04.2009 00:59
quelle

Tags und Links