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