1

テスト/プロファイリングの目的で、IOCP を使用して単純なダミー サーバー/ダミー クライアント プログラムを作成しました。(また、私は非同期ネットワーク プログラミングが初めてであることに注意したいと思います)

サーバーは元のクライアントとうまく動作しているように見えますが、ダミー クライアントが ConnectEx 関数を使用してサーバーに接続しようとすると、IOCP ワーカー スレッドは GetQueuedCompletionStatus 関数によってブロックされ、サーバーが接続の受け入れに成功するまで結果を返しません。

問題および/または理由は何ですか? また、この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

あなたのコメントであなた自身の質問に答えると思います。

イベントの順序が正しくありません。Bind、ConnectEx、IOCP への関連付けと言っています。

バインドし、ソケットを IOCP に関連付けてから、ConnectEx を呼び出す必要があります。

于 2010-07-01T14:27:21.700 に答える
0

Even after you associate your accepted socket to IOCP, your worker thread will remain blocked on GetQueuedCompletionStatus untill you post an "unlocking" completion event. Completion events for receive/write operation wo'nt be sent by the system unless you "unlock" your new socket. For details ckeck the source code of Push Framework http://www.pushframework.com It is a C++ network application framework using IOCP. The "unlocking" trick exists in the "IOCPQueue" class.

于 2010-07-20T10:07:40.433 に答える