我用 Winsock 编写服务应用程序。我想要异步套接字。在 TThread in Execute 我有示例代码:
procedure TNasluchujPolaczenia.Execute;
var
WindowsSockets: WSAData;
begin
WSAStartup(MAKEWORD(2, 0), WindowsSockets);
mysocket:= Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sizesettings := SizeOf(SettingsSocket)
bind(mysocket, SettingsSocket, SizeOf(SettingsSocket));
listen(mysocket, 10);
while myend <> True do
begin
WSAAsyncSelect(mysocket, Handle, WM_USER, FD_READ or FD_ACCEPT);
accept(mysocket, pointer(@SettingsSocket), @sizesettings);
...
end;
Shutdown(mysocket, SD_BOTH);
CloseSocket(mysocket);
WSACleanUp();
Terminate;
end;
这不起作用:
WSAAsyncSelect(mysocket, Handle, WM_USER, FD_READ or FD_ACCEPT);
我不知道为什么。我的服务在此acccept()上被阻止,当我有连接时,我的循环执行一次,然后被阻止。我在普通应用程序中检查了我的代码,一切正常。