Ich Versuche gerade ein Client Socket zu Schließen.
Jedoch Funktioniert es nicht richtig.
Code: Alles auswählen
procedure TClient.Disconnect;
begin
Echo('DD1', Data.Id);
ThreadSock.CloseSocket; //Line 32
Echo('DD2', Data.Id);
ThreadSock.Free;
Echo('DD3', Data.Id);
Disconnectet := True;
end;
{ [...] }
procedure TClient.Execute;
var
S: string;
begin
ThreadSock := TTCPBlockSocket.Create;
try
ThreadSock.socket := CSock;
ThreadSock.GetSins;
repeat
if Terminated or Disconnectet then break;
S := ThreadSock.RecvPacket(60000);
S := Receive(S);
if ThreadSock.lastError<>0 then break;
if not (S = '') then
ThreadSock.SendString(S);
if ThreadSock.lastError<>0 then break;
until false;
finally
Echo('TT1', Data.Id);
ThreadSock.CloseSocket;
Echo('TT2', Data.Id);
ThreadSock.Free;
Echo('TT3', Data.Id);
end;
end;
Wenn ich dann diesen Disconnect ausführen möchte passiert folgendes:
Code: Alles auswählen
[05.06.2010 21:28:59.573] #0: DD1
[05.06.2010 21:28:59.573] #0: TT1
[05.06.2010 21:28:59.573] #0: TT2
[05.06.2010 21:28:59.574] #0: TT3
An unhandled exception occurred at $0000000000477BAC :
EAccessViolation : Access violation
$0000000000477BAC line 2470 of blcksock.pas
$00000000004781D7 line 2537 of blcksock.pas
$000000000047CC6D line 3641 of blcksock.pas
$0000000000480121 line 32 of Client.pas
$0000000000413F5F line 106 of project1.lpr
Warum leuft aber TT1, TT2 und TT3 ohne exception durch?