Я тестирую небольшой скрипт на Windows 8, который пытается извлечь простую веб-страницу на порт 80. Однако подключение к сети каждый раз прерывается с ошибкой 10053.

Первоначально я думал о проблеме с брандмауэром (я запускаю McAffee), но я больше не уверен (ничего в журналах; все еще происходит сбой при отключении брандмауэра).

Итак, что я могу сделать, чтобы определить проблему? Например, как можно быть уверенным, что запрос покинул сетевую карту?

Я запустил Wireshark, и он действительно показывает небольшую активность:

(я) SYN

(удаленный IP) SYN, ACK

(я) ACK

(я) RST, ACK

Значит ли это, что запрос действительно отправлен?

заранее спасибо

1 ответ1

2

Ошибка Winsock 10053 = "WSAECONNABORTED":

SOCKET_ERROR: установленное соединение было прервано программным обеспечением на вашем хост-компьютере.

Упоминаемое "программное обеспечение" - это (скорее всего) сам Winsock .

Нашел эту страницу, на которой есть отличная реклама, которая, по-видимому, охватывает именно то, с чем вы сталкиваетесь, потому что, вероятно, ваш скрипт не формирует правильный HTTP-заголовок.

HTTP POST должен быть отправлен на HTTP-сервер.
Сервер начинает читать POST и замечает, что заголовок HTTP-запроса недействителен.
Он немедленно отправляет ответ HTTP (с состоянием ошибки, возможно, status = 400) и закрывает соединение, не пытаясь продолжить чтение оставшейся части ожидаемого запроса HTTP.

Между тем клиент все еще радостно записывает оставшуюся часть HTTP-запроса в сокет. (Помните, что сокет TCP/IP должен быть закрыт с обеих сторон. В этом случае сервер закрыл свою сторону, но клиент все еще закачивает данные в полуоткрытое соединение.)

Клиент заканчивает запись HTTP POST в сокет - это означает, что данные были буферизованы в Winsock. Затем клиентское приложение пытается прочитать HTTP-ответ, но не может, потому что исходящая повторная передача (буферизованных данных WinSock) завершилась неудачно, а сокетное соединение было отключено на стороне клиента (Winsock). Хотя HTTP-сервер отправил ответ, он потерян и не может быть получен. Ошибка, которую ваше приложение получит при попытке прочитать ответ HTTP на сокете, называется WSAECONNABORTED.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .