Ich hatte vor kurzem das gleiche Problem.
Wenn der Client nicht mehr verbunden ist,
"merkt" der ServerSocket dass nicht immer.
Wenn der Client disconnected,
wird WaitForData() verlassen, obwohl keine Daten
empfangen wurden. Daher einfach einen Check
in der Schleife, ob Daten gesendet wurden
(if recv = 0) und schon ist das Problem gegessen.
Delphi-Quellcode:
repeat
if SockStream.WaitForData(INFINITE) then begin
recv := SockStream.Read(len,SizeOf(len));
if (recv = 0) then Exit; //Verlasse Thread, wenn disconnected
//Ansonsten wie gewohnt weitermachen
recv := SockStream.Read(NetBuf[0],len);
if (recv = len) then GMNet.Parse(NetBuf);
end;
until Terminated or (ClientSocket.Connected = False);
MfG