
Ich teste ein kleines Skript unter Windows 8, das versucht, eine einfache Webseite über Port 80 abzurufen. Die Netzwerkverbindung schlägt jedoch jedes Mal mit der Fehlermeldung fehl10053.
Ich dachte zunächst an ein Firewall-Problem (ich verwende McAffee), bin mir aber nicht mehr so sicher (nichts in den Protokollen; schlägt immer noch fehl, wenn ich die Firewall deaktiviere).
Was kann ich also tun, um das Problem einzugrenzen? Wie kann ich beispielsweise sicherstellen, dass die Anfrage die Netzwerkkarte verlassen hat?
Ich habe Wireshark ausgeführt und es zeigt mir tatsächlich eine kleine Aktivität:
(ich) SYN
(Remote-IP) SYN, ACK
(ich) ACK
(ich) RST, ACK
Bedeutet das also, dass die Anfrage tatsächlich gesendet wurde?
Dank im Voraus
Antwort1
Winsock-Fehler10053 = "WSAECONNABORTED":
SOCKET_ERROR: Eine hergestellte Verbindung wurde von der Software auf Ihrem Hostcomputer abgebrochen.
Die erwähnte „Software“ ist (höchstwahrscheinlich)Winsockselbst.
Gefundendiese Seite, das einen hervorragenden Klappentext enthält, der genau Ihr Problem zu beschreiben scheint, nämlich, dass Ihr Skript wahrscheinlich keinen richtigen HTTP-Header bildet.
Ein HTTP POST soll an einen HTTP-Server gesendet werden.
Der Server beginnt mit dem Lesen des POST und stellt fest, dass der HTTP-Anforderungsheader ungültig ist.
Er sendet sofort eine HTTP-Antwort (mit einem Fehlerstatus, möglicherweise Status=400) und schließt die Verbindung, ohne zu versuchen, den Rest der bevorstehenden HTTP-Anforderung weiter zu lesen.
In der Zwischenzeit schreibt der Client weiterhin fröhlich den Rest der HTTP-Anforderung in den Socket. (Denken Sie daran, dass eine TCP/IP-Socket-Verbindung von beiden Seiten geschlossen werden muss. In diesem Fall hat der Server seine Seite geschlossen, aber der Client pumpt immer noch Daten in die halboffene Verbindung.)
Der Client beendet das Schreiben des HTTP POST in den Socket – was bedeutet, dass die Daten in Winsock gepuffert wurden. Die Client-Anwendung versucht dann, die HTTP-Antwort zu lesen, kann dies jedoch nicht, da die ausgehende erneute Übertragung (der gepufferten Daten durch WinSock) fehlgeschlagen ist und die Socket-Verbindung auf der Clientseite (durch Winsock) beendet wurde. Obwohl der HTTP-Server die Antwort gesendet hat, ist sie verloren und kann nicht abgerufen werden. Der Fehler, den Ihre Anwendung beim Versuch erhält, die HTTP-Antwort auf dem Socket zu lesen, ist WSAECONNABORTED.