0

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()でブロックされています。接続すると、ループが一度実行され、次にブロックされます。プレーンアプリケーションでコードをチェックしましたが、すべて問題ありません。

4

0 に答える 0