Letztendlich ruft ein Disconnect (unter Windows) diesen Code auf:
Delphi-Quellcode:
procedure TIdStackWindows.Disconnect(ASocket: TIdStackSocketHandle);
begin
// Windows uses Id_SD_Send, Linux should use Id_SD_Both
WSShutdown(ASocket, Id_SD_Send);
// SO_LINGER is false - socket may take a little while to actually close after this
WSCloseSocket(ASocket);
end;
Durch das CloseSocket ist das Socket
Handle ungültig (
MSDN: "The closesocket function closes a socket. Use it to release the socket descriptor passed in the s parameter. Note that the socket descriptor passed in the s parameter may immediately be reused by the system as soon as closesocket function is issued. As a result, it is not reliable to expect further references to the socket descriptor passed in the s parameter to fail with the error WSAENOTSOCK.").
Dadurch kann man nach dem Schliessen nicht mehr sinnvoll auf das Socket
Handle zugreifen.
Der Client kann daher auch nicht mehr prüfen, ob noch irgendetwas vom Server gesendet wird.
Die
TCP Pakete sieht man allerdings auch sonst nicht. Mit
Indy (oder anderen
TCP Bibliotheken die auf Winsock basieren) kommt man daher nicht weiter.