Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Indy TCP - Warten bis die Gegenseite zugemacht hat

  Alt 6. Mär 2018, 07:57
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.
Michael Justin

Geändert von mjustin ( 6. Mär 2018 um 09:22 Uhr)
  Mit Zitat antworten Zitat