Wenn recv
einen Wert von 0 zurückgibt, der die Verbindungsmittel werden geschlossen.
anzeigen recv
man page:
Diese Anrufe die Anzahl der empfangenen Bytes zurück oder -1, wenn ein Fehler aufgetreten . Der Rückgabewert ist 0, wenn der Peer eine ordnungsgemäße Abschaltung durchgeführt hat.
In Antwort auf Frage 1, ja der Socket ist jetzt ungültig. Sie müssen einen neuen Socket und eine neue Verbindung für die weitere Kommunikation erstellen.
bearbeiten
Jetzt als valdo unten erwähnt, gibt es auch die Möglichkeit, eine halbgeschlossene TCP-Verbindung zu haben, in dem Sie nicht mehr empfangen können, aber Sie können, bis Sie an die Buchse Schreiben halten Haben Sie Ihre Daten gesendet? Siehe diesen Artikel für weitere Details: TCP Half-Close. Es klingt nicht so, als hättest du diese Situation.
In Antwort # 2, gibt es grundsätzlich zwei Möglichkeiten in Frage eine geschlossene Buchse zu erkennen. Dies setzt voraus, dass der Socket ordnungsgemäß heruntergefahren wurde, was bedeutet, dass der Peer entweder shutdown
oder close
heißt.
Die erste Methode ist das Lesen aus dem Socket. In diesem Fall erhalten Sie den Rückgabewert 0. Die andere Methode besteht darin, in den Socket zu schreiben, wodurch das Signal SIG_PIPE ausgelöst wird, was auf eine defekte Pipe hinweist.
Um das Signal zu vermeiden, können Sie die MSG_NOSIGNAL
Socket-Option festgelegt, in dem Fall send
zurückkehren würde -1 und setzte errno
-EPIPE
.
Haben Sie auf der Remote-Seite shutdown() aufgerufen? Das wird recv 0 zurückgeben: http://StackOverflow.com/questions/2843277/c-winsock-p2p/2920787#2920787 – Default