Accept同期とは異なり、BeginAccept新しく作成された接続用のソケットを提供しません。EndAcceptただし、そうですが、将来の接続が受け入れられなくなることもあります。そこで、次のコードを作成して、複数の「クライアント」がサーバーに接続できるようにしました。
serverSocket.BeginAccept(AcceptCallback, serverSocket);
AcceptCallbackコード:
void AcceptCallback(IAsyncResult result)
{
Socket server = (Socket)result.AsyncState;
Socket client = server.EndAccept(result);
// client socket logic...
server.BeginAccept(AcceptCallback, server); // <- continue accepting connections
}
これを行うためのより良い方法はありますか?それは本質的に非同期呼び出しを再帰的にループするので、それは少し「ハッキー」のようです。
おそらく、複数のスレッドが作成されるなど、非同期メソッドを複数回呼び出すことにはオーバーヘッドがありますか?