Einzelnen Beitrag anzeigen

Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Daten werden nicht komplett gesendet (TCP-Socket flushen?)

  Alt 8. Jul 2011, 19:06
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...
Ralf Kaiser
  Mit Zitat antworten Zitat