我正在 Windows 8 上测试一个小脚本,它尝试在端口 80 上获取一个简单的网页。但是网络连接每次都失败并出现错误10053。
我最初以为是防火墙问题(我正在运行 McAffee),但现在我不太确定了(日志中没有任何内容;当我停用防火墙时仍然失败)。
那么我该怎么做才能界定问题?例如,如何确定请求是否已离开网卡?
我运行了 Wireshark,它确实向我展示了一个小活动:
(我)SYN
(远程 IP)SYN,ACK
(我)确认
(我)RST,ACK
那么这是否意味着请求确实已发送?
提前致谢
答案1
Winsock 错误10053 = "WSAECONNABORTED":
SOCKET_ERROR:主机中的软件中止了已建立的连接。
提到的“软件”很可能是温索克本身。
成立这一页,它有一个很好的简介,似乎准确地涵盖了您遇到的问题,因为可能是您的脚本没有形成正确的 HTTP 标头。
HTTP POST 将发送到 HTTP 服务器。
服务器开始读取 POST 并注意到 HTTP 请求标头无效。
它立即发送 HTTP 响应(带有错误状态,可能是 status=400)并关闭连接,而不尝试继续读取即将发出的 HTTP 请求的其余部分。
同时,客户端仍在愉快地将 HTTP 请求的其余部分写入套接字。(请记住,TCP/IP 套接字连接需要从两端关闭。在这种情况下,服务器已关闭其端,但客户端仍在将数据泵入半开连接。)
客户端完成将 HTTP POST 写入套接字 - 这意味着数据已缓冲到 Winsock。然后,客户端应用程序尝试读取 HTTP 响应,但无法读取,因为传出的重新传输(WinSock 缓冲的数据)失败,并且套接字连接在客户端(由 Winsock)关闭。即使 HTTP 服务器发送了响应,它也已丢失并且无法检索。尝试读取套接字上的 HTTP 响应时,应用程序将收到的错误是 WSAECONNABORTED。