2009-08-25 7 views
1

Ich habe ein Problem, wo ein TCP-Socket auf einen Port hört, und hat für eine sehr lange Zeit perfekt funktioniert - es hat mehrere Verbindungen behandelt und scheint einwandfrei zu funktionieren. gelegentlich jedoch, wenn() Aufruf akzeptieren eine neue Verbindung der accept() Aufruf fehlschlägt zu erstellen, und ich erhalte die folgende Fehlerzeichenfolge aus dem System:horing socket stirbt unerwartet

10022: An invalid argument was supplied.

Offenbar kann dies passieren, wenn Sie annehmen() aufrufen an einem Socket, der nicht mehr zuhört, aber ich habe den Socket nicht selbst geschlossen und bin nicht über irgendwelche Fehler auf diesem Socket informiert worden.

Kann jemand irgendeinen Grund denken, warum ein hörender Sockel aufhört zu hören, oder wie der oben erwähnte Fehler erzeugt werden könnte?

+2

Überprüfen Sie alle Ihre Rückgabewerte sorgfältig genug, um sicher zu sein, dass Sie nicht über Fehler an diesem Socket informiert wurden? – kmarsh

Antwort

3

Einige Möglichkeiten:

  • ein anderer Teil des Codes überschrieben den Griff Wert. Überprüfen Sie, ob es sich geändert hat (behalten Sie eine Kopie woanders und vergleichen Sie es, drucken Sie es aus, Haltepunkt beim Schreiben im Debugger, was auch immer).

  • Etwas schloss den Griff.

  • Interaktionen mit einem fehlerhaften Winsock LSP.

1

Eine Sache, die mir in den Sinn kommt, ist System Standy oder Hibernation-Modus. Ich bin nicht sicher, wie diese Ereignisse von der Winsock-Bibliothek behandelt werden. Könnte sein, dass die Netzwerkschnittstelle (teilweise) heruntergefahren ist.

1

Es kann sinnvoll sein, den Thread des Sockets zu debuggen (entweder mit einer IDE oder über einen Disassembler) und seine Ausführung für alles zu beobachten, was dazu führen könnte, dass er nicht mehr hört.