Daran kann es eigentlich nicht liegen...
Unsere Sendeklasse ist von TCustomIPClient (und damit von TBaseSocket) abgeleitet. Und in dieser Vererbungskette wird beim Close folgendes ausgeführt:
Delphi-Quellcode:
procedure TCustomIpClient.Close;
begin
if FConnected then
begin
{$IFDEF MSWINDOWS}
ErrorCheck(shutdown(FSocket, SD_BOTH));
{$ENDIF}
{$IFDEF LINUX}
ErrorCheck(shutdown(FSocket, SHUT_RDWR));
{$ENDIF}
FConnected := False;
DoDisconnect;
end;
inherited Close;
end;
Und dann im "inherited", also in TBaseSocket:
Delphi-Quellcode:
procedure TBaseSocket.Close;
begin
if FActive then
begin
{$IFDEF MSWINDOWS}
ErrorCheck(closesocket(FSocket));
{$ENDIF}
{$IFDEF LINUX}
ErrorCheck(Libc.__close(FSocket));
{$ENDIF}
FSocket := INVALID_SOCKET;
FActive := False;
DoDestroyHandle;
end;
end;
Es wird also zuerst "shutdown" und danach "closesocket" aufgerufen. Das sieht für mich soweit korrekt aus...