0

ソケット通信に IOCP を使用するクライアント アプリケーションがあります。ConnectEx を使用して、リモート エンドポイントへの TCP 接続を確立しています (ConnectEx を呼び出す前に、ソケットを ADDR_ANY およびポート 0 にバインドします)。

同じリモート エンドポイント (同じ IP アドレスとポート番号) への 2 つの接続を持つことは有効です。現在のコードでその条件をテストすると、WSARecv() への呼び出しから未処理の 2 つの重複した IO 読み取り操作 (接続されたソケットごとに 1 つ) があります。各 WSARecv() は、正しいソケットと重複した構造で呼び出されます。例: WSARecv(socket1, ... オーバーラップ 1) および WSARecv(socket2, ... オーバーラップ 2)。私が遭遇した問題は、どちらかのリモートから応答が返ってきたときに、両方の未解決の重複操作の完了イベントをトリガーすることです。私のコードは、2 つのリモートが同じ IP アドレスとポート番号を持っている場合にのみこの結果を生成し、2 つの一意のリモート アドレスがある場合には生成しません。これは予想される動作ですか (そうでないことを願っています)。もしそうなら、これを達成する別の方法はありますか?

4

1 に答える 1