ソケットを介してメッセージを送信しようとすると、WinSock エラー 10038 で失敗しました。約 40 秒後、メッセージは同じソケットから正常に受信され、その後 send() も同じソケットで成功しています。この動作は、Windows Server 2003 で確認されています。これは、WinSock および Windows Server 2003 で既知の動作ですか?
3 に答える
Winsockエラー10038は、「ソケット以外のもので操作が試行された」ことを意味します。
エラーコードに関する情報を見つけるためのちょっとしたコツ(あらゆる種類のWindowsエラーコードに役立ちます):
- コマンドプロンプトを開く
- 「nethelpmsg10038」と入力します
アプリケーションはどの言語で書かれていますか?C / C ++の場合、無効なソケットハンドルを使用している可能性がありますか?
階層化された winsock プロバイダーをチェックするというアイデアを提供してくれた a_mole に感謝します。一部の PC と TimesTen DB で問題が発生しています。ODBC クライアント DSN をセットアップしようとすると、10038 エラーが発生します。影響を受けた PC からの netsh 出力を調べたところ、Wave Systems の Embassy Trust Suite がインストールされていることがわかりました。明らかに、デルは一部の PC にこれをプリインストールしていました。とにかく、このソフトウェアをアンインストールすると、問題は解決しました。
再度、感謝します
ルー
プラットフォームの問題ではありません。保証できます。ほとんどの場合、ソケットハンドルにアクセスするために使用している変数はスレッドセーフではなく、実際のソケットが作成される前に send() 呼び出しで使用されています。
別の考えられる原因は、階層化された winsock プロバイダーの存在です。コマンドプロンプトで「netsh winsock show」を実行すると、インストールされているプロバイダーが表示され、Microsoft 以外のプロバイダーを削除してみることができます。