下面是工作现成的代码(delphi) procedure TWorkerThread.Execute; var Block: PBlock; Transfered: DWORD; ClientSocket: TServerClientSocket; begin while FServer.Active do begin Block := nil; Transfered := 0; ClientSocket := nil;
if not GetQueuedCompletionStatus(FServer.CompletionPort, Transfered, DWORD(ClientSocket), POverlapped(Block), INFINITE) then begin end; case ClientSocket.WorkBlock(Block, Transfered) of //WorkBlock读取数据,调用WSARecv //(WSARecv(FSocket, @wsaBuffer, 1, Transfer, Flags, @Overlapped, nil);) RESPONSE_UNKNOWN: { 操作未知的话,应该返回给客户端:...不应该Close....保留 } //FreeAndNil(ClientSocket); ; RESPONSE_FAIL: begin end; end; end; end;
procedure TWorkerThread.Execute;
var
Block: PBlock;
Transfered: DWORD;
ClientSocket: TServerClientSocket;
begin
while FServer.Active do
begin
Block := nil;
Transfered := 0;
ClientSocket := nil;
if not GetQueuedCompletionStatus(FServer.CompletionPort, Transfered,
DWORD(ClientSocket), POverlapped(Block), INFINITE) then
begin end; case ClientSocket.WorkBlock(Block, Transfered) of
//WorkBlock读取数据,调用WSARecv
//(WSARecv(FSocket, @wsaBuffer, 1, Transfer, Flags, @Overlapped, nil);)
RESPONSE_UNKNOWN:
{ 操作未知的话,应该返回给客户端:...不应该Close....保留 }
//FreeAndNil(ClientSocket);
;
RESPONSE_FAIL:
begin
end;
end;
end;
end;
不知道楼主的问题是不是这个原因?