
Я тестирую небольшой скрипт на Windows 8, который пытается загрузить простую веб-страницу через порт 80. Однако сетевое соединение каждый раз прерывается с ошибкой10053.
Сначала я думал, что проблема в брандмауэре (у меня установлен McAffee), но теперь я в этом не уверен (в журналах ничего нет; при отключении брандмауэра все равно происходит сбой).
Так что я могу сделать, чтобы определить проблему? Например, как убедиться, что запрос покинул сетевую карту?
Я запустил Wireshark, и он действительно показал небольшую активность:
(я) СИН
(удаленный IP) SYN, ACK
(я) АСК
(я) RST, ACK
Значит ли это, что запрос действительно был отправлен?
заранее спасибо
решение1
Ошибка Winsock10053 = "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.