質問

ソケット経由でメッセージを送信しようとしましたが、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 以外のプロバイダーを削除してみることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top