0

リクエストが交換されるたびに接続を開いたり閉じたりするTCP/IPクライアント/サーバー接続をセットアップしました。それは完璧に機能します。クライアントアプリは接続を開き、リクエストを送信して待機します。サーバーアプリケーションは、要求を受信して​​応答を生成し、それを送り返して接続を閉じます。Cientアプリとサーバーアプリはそれを何百回も行います。

今、私は次のステップに行こうとしていました:送信元IPアドレスとポートを設定します。

このコードはLinuxとWindowsの両方で機能するはずだったので、SO_BINDTODEVICEはLinux / Unixでのみサポートされているため、問題ありません。

クライアントソケットで送信元ポートとANYADRRをバインドしようとしました。そしてそれは動作します...しばらくの間。最終的にはエラー10038が発生します。インターネットでいくつかの記事を読みましたが、明確な答えはありません...ソースIPの選択は不明なままです。

同じライブラリにUNICASTモードとMULTICASTモード(コネクションレス型UDP通信モード)、送信者と受信者があり、MULTICASTモードで送信元ポート/IPを設定できたことに注意してください。UNICASTは試していません。まだ。

とにかく、誰かが助けになるかもしれない何かを知っていますか?私はWinSock2.2を使用しており、可能な限りプラットフォームに依存しないようにしています。

4

1 に答える 1

0

Winsock エラー10038は ですWSAENOTSOCK。これは、コードのどこかにバグがあることを意味します。SOCKET有効なソケット オブジェクトを指していないハンドルで何かをしようとしています。bind()それは関数自体とは何の関係もありません。呼び出してエラーの結果をチェックしていないか、アプリによって既に閉じられているハンドルsocket()を使用しようとしているか、ハンドルを破損しているどこかにメモリ オーバーフローが発生しています。SOCKETSOCKET

于 2012-07-27T23:23:39.743 に答える