Linux kann also shutdown () einen Parameter SHUT_RD, SHUT_WR oder SHUT_RDWR nehmen, um nur einen Teil des Kommunikationskanals abzuschalten. Aber in Bezug auf die TCP-Nachrichten, die an den Peer senden, wie funktioniert es?
In der TCP-Statusmaschine funktioniert das Schließen in einer 4-Wege-Handshake-Art,
%Vor%Also, welche Nachrichten dosieren sendet es, wenn ich eine Abschaltung (Sock, SHUT_RD) oder Shutdown (Sock, SHUT_WR) mache?
shutdown(sd, SHUT_WR)
sendet ein FIN, auf das der Peer mit einem ACK reagiert. Bei weiteren Versuchen, in den Socket zu schreiben, tritt ein Fehler auf. Der Peer kann jedoch weiterhin Daten senden.
shutdown(sd, SHUT_RD)
sendet nichts im Netzwerk: Es wird lediglich die lokale API so konditioniert, dass EOS für alle nachfolgenden Lesevorgänge auf dem Socket zurückgegeben wird. Das Verhalten beim Empfang von Daten auf einem Socket, das zum Lesen heruntergefahren wurde, ist systemabhängig: Unix wird es bestätigen und wegwerfen; Linux wird es quittieren und puffern, was den Sender schließlich zum Stillstand bringen wird; Windows wird eine RST ausgeben, die der Absender als "Verbindung durch Peer zurückgesetzt" sieht.