2

MSDN で Winsock2 のドキュメントを読みましたが、まだいくつかの点を明確にする必要があります。

WSAAsyncSelect() を使用したときに得られるセットアップのようなものを作成する予定でしたが、別のスレッドを使用しました。WSAEventSelect() を使用して、複数のソケットを 1 つのイベント オブジェクトにリンクできますか?

代わりに完了ポートを使用した場合、どのイベントが完了ポートを介して取得されますか? MSDN にはファイル操作に関するリストがありますが、完了ポートを介して送信されるイベント (FD_READ、FD_WRITE など) に関連付けるのに苦労しました。どのイベントが完了しているかを知る方法はありますか? または、何かを送信または受信するたびに、これに注意して構造体に保存する必要がありますか?

ありがとうございます *誰かがこれについて私に与えることができる助け = D

編集:さらに良いことに、これを行うには C# に切り替えるだけでよいでしょうか? 非常に人気があり、この特定のタスクにより適しているようです。

4

2 に答える 2

1

いいえ、複数のソケットを 1 つの WSAEVENT にリンクすることはできません。通知を受け取りたい個々のソケットごとに、WSACreateEvent() と WSAEventSelect() を呼び出す必要があります。ただし、WSAWaitForMultipleEvents() を使用して、複数のソケットからのイベントを単一のスレッドで待機させることができます。

完了ポートの使用に関しては、次のような MSDN の記事を読むことをお勧めします。

Windows Sockets 2.0: 完了ポートを使用してスケーラブルな Winsock アプリを作成します。

于 2010-08-02T21:31:20.607 に答える
1

[免責事項: 私はソケット プログラミングの経験が非常に限られています。]

WSAAsyncSelect() を使用したときに得られるセットアップのようなものを作成する予定でしたが、別のスレッドを使用しました。WSAEventSelect() を使用して、複数のソケットを 1 つのイベント オブジェクトにリンクできますか?

それは意味がありません。イベントは 1 回だけ通知できます。そのため、同じイベントに複数のソケットが接続されている場合、シグナルが送信されたときに、どのソケットがイベントをシグナルしたかを知ることはできません!

あなたができることは、ソケットごとにイベントを作成することです(おそらく、ソケットごとに複数のイベント:興味のあるFD_ *イベントごとに)、WSAWaitForMultipleEvents(http://msdn.microsoft.com/en-us/library/ms742219 %28v=VS.85%29.aspx )

于 2010-07-30T18:50:43.857 に答える