Skip to content

Commit

Permalink
调整 Close 顺序
Browse files Browse the repository at this point in the history
  • Loading branch information
winddriver committed Feb 19, 2019
1 parent 398bcf3 commit 3f56500
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 17 deletions.
4 changes: 3 additions & 1 deletion Net/Net.CrossSocket.Epoll.pas
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,8 @@ procedure TEpollCrossSocket.Connect(const AHost: string; APort: Word;
LEpConnection.FConnectCallback := ACallback;
if not LEpConnection._UpdateIoEvent([ieWrite]) then
begin
if Assigned(ACallback) then
ACallback(LConnection, False);
LConnection.Close;
Exit(False);
end;
Expand All @@ -675,9 +677,9 @@ procedure TEpollCrossSocket.Connect(const AHost: string; APort: Word;
end;
end else
begin
TSocketAPI.CloseSocket(ASocket);
if Assigned(ACallback) then
ACallback(nil, False);
TSocketAPI.CloseSocket(ASocket);
Exit(False);
end;

Expand Down
28 changes: 16 additions & 12 deletions Net/Net.CrossSocket.Iocp.pas
Original file line number Diff line number Diff line change
Expand Up @@ -234,10 +234,10 @@ procedure TIocpCrossSocket._HandleConnect(APerIoData: PPerIoData);
_LogLastOsError('TIocpCrossSocket._HandleConnect');
{$ENDIF}

TSocketAPI.CloseSocket(LClientSocket);

if Assigned(APerIoData.Callback) then
APerIoData.Callback(nil, False);

TSocketAPI.CloseSocket(LClientSocket);
end;
begin
LClientSocket := APerIoData.Socket;
Expand All @@ -261,12 +261,13 @@ procedure TIocpCrossSocket._HandleConnect(APerIoData: PPerIoData);

LSuccess := _NewReadZero(LConnection);
if LSuccess then
TriggerConnected(LConnection)
else
LConnection.Close;
TriggerConnected(LConnection);

if Assigned(APerIoData.Callback) then
APerIoData.Callback(LConnection, LSuccess);

if not LSuccess then
LConnection.Close;
end;

procedure TIocpCrossSocket._HandleRead(APerIoData: PPerIoData);
Expand Down Expand Up @@ -378,9 +379,9 @@ procedure TIocpCrossSocket.Connect(const AHost: string; APort: Word;
function _Connect(ASocket: THandle; AAddr: PRawAddrInfo): Boolean;
procedure _Failed2;
begin
TSocketAPI.CloseSocket(ASocket);
if Assigned(ACallback) then
ACallback(nil, False);
TSocketAPI.CloseSocket(ASocket);
end;
var
LSockAddr: TRawSockAddrIn;
Expand Down Expand Up @@ -486,11 +487,11 @@ procedure TIocpCrossSocket.Listen(const AHost: string; APort: Word;

procedure _Failed;
begin
if (LListen <> nil) then
LListen.Close;

if Assigned(ACallback) then
ACallback(LListen, False);

if (LListen <> nil) then
LListen.Close;
end;

procedure _Success;
Expand Down Expand Up @@ -608,10 +609,11 @@ procedure TIocpCrossSocket.Send(AConnection: ICrossConnection; ABuf: Pointer;
// 一个, 本函数提供了发送结果的回调函数, 在回调函数报告发送成功
// 之后就可以继续下一块数据发送了
_FreeIoData(LPerIoData);
AConnection.Close;

if Assigned(ACallback) then
ACallback(AConnection, False);

AConnection.Close;
end;
end;

Expand Down Expand Up @@ -656,16 +658,18 @@ function TIocpCrossSocket.ProcessIoEvent: Boolean;
_NewAccept(LPerIoData.CrossData as ICrossListen);
end else
begin
LPerIoData.CrossData.Close;
if Assigned(LPerIoData.Callback)
and (LPerIoData.CrossData is TIocpConnection) then
LPerIoData.Callback(LPerIoData.CrossData as ICrossConnection, False);

LPerIoData.CrossData.Close;
end;
end else
begin
TSocketAPI.CloseSocket(LPerIoData.Socket);
if Assigned(LPerIoData.Callback) then
LPerIoData.Callback(nil, False);

TSocketAPI.CloseSocket(LPerIoData.Socket);
end;
finally
_FreeIoData(LPerIoData);
Expand Down
11 changes: 7 additions & 4 deletions Net/Net.CrossSocket.Kqueue.pas
Original file line number Diff line number Diff line change
Expand Up @@ -528,12 +528,13 @@ procedure TKqueueCrossSocket._HandleConnect(AConnection: ICrossConnection);
end;

if LSuccess then
TriggerConnected(LConnection)
else
TriggerDisconnected(LConnection);
TriggerConnected(LConnection);

if Assigned(LConnectCallback) then
LConnectCallback(LConnection, LSuccess);

if not LSuccess then
TriggerDisconnected(LConnection);
end;

procedure TKqueueCrossSocket._HandleRead(AConnection: ICrossConnection);
Expand Down Expand Up @@ -764,16 +765,18 @@ procedure TKqueueCrossSocket.Connect(const AHost: string; APort: Word;
if not LKqConnection._UpdateIoEvent([ieWrite]) then
begin
TriggerDisconnected(LConnection);
if Assigned(ACallback) then
ACallback(LConnection, False);
Exit(False);
end;
finally
LKqConnection._Unlock;
end;
end else
begin
TSocketAPI.CloseSocket(ASocket);
if Assigned(ACallback) then
ACallback(nil, False);
TSocketAPI.CloseSocket(ASocket);
Exit(False);
end;

Expand Down

0 comments on commit 3f56500

Please sign in to comment.