
Windows 8で、ポート80で簡単なWebページを取得しようとする小さなスクリプトをテストしています。しかし、ネットワーク接続は毎回エラーで失敗します。10053。
最初はファイアウォールの問題だと思いました (McAffee を実行しています) が、もうよくわかりません (ログには何も記録されておらず、ファイアウォールを無効にしても失敗します)。
では、問題を特定するために何ができるでしょうか? たとえば、リクエストがネットワーク カードから送信されたかどうかをどのように確認できますか?
Wireshark を実行したところ、確かに小さなアクティビティが表示されました。
(私)SYN
(リモート IP) SYN、ACK
(私) 了解
(私) RST、ACK
ということは、リクエストは実際に送信されたということでしょうか?
前もって感謝します
答え1
Winsock エラー10053 = "WSAECONNABORTED":
SOCKET_ERROR: 確立された接続がホスト マシンのソフトウェアによって中止されました。
ここで言及されている「ソフトウェア」とは(おそらく)ウィンソック自体。
見つかったこのページには、スクリプトが適切な HTTP ヘッダーを形成していないことが原因である可能性が高いという点で、まさにあなたが遭遇している問題をカバーしていると思われる優れた説明があります。
HTTP POST は、HTTP サーバーに送信されます。
サーバーは POST の読み取りを開始し、HTTP 要求ヘッダーが無効であることに気付きます。サーバー
はすぐに HTTP 応答 (エラー ステータス、おそらくステータス = 400) を送信し、これから送信される HTTP 要求の残りの部分の読み取りを続行せずに接続を閉じます。
その間、クライアントは HTTP 要求の残りの部分をソケットに正常に書き込み続けます (TCP/IP ソケット接続は両側から閉じる必要があることに注意してください。この場合、サーバーは自分の側を閉じていますが、クライアントは半開きの接続にデータを送信し続けています)。
クライアントはソケットへの HTTP POST の書き込みを完了します。つまり、データは Winsock にバッファリングされています。次に、クライアント アプリケーションは HTTP 応答を読み取ろうとしますが、送信再送信 (WinSock によるバッファリングされたデータ) が失敗し、ソケット接続がクライアント側 (Winsock による) でシャットダウンされたため、読み取ることができません。HTTP サーバーが応答を送信したにもかかわらず、応答は失われ、取得できません。ソケット上の HTTP 応答を読み取ろうとしたときにアプリケーションが受け取るエラーは、WSAECONNABORTED です。