recv() windows socket nimmt unendlich viel Zeit - wie timeout?
Ich mit Datei-Deskriptoren zu finden, die lesbar sockets und gehen Sie auf zu Lesen. Für einige Gründe, eine Steckdose, die hat keine Daten über die Leitung geht auf zu Lesen, und kehrt nie zurück. Gibt es eine Möglichkeit, kann ich aus dem erhalten, nach einem timeout?
Bin ich mit winsock-Bibliothek.
InformationsquelleAutor ssk | 2011-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://tangentsoft.net/wskfaq/newbie.html#timeout
2.15 - Wie kann ich den timeout für eine Winsock-Funktion?
Einige der Blockierung von Winsock-Funktionen (z.B. connect()) ein timeout eingebettet in Ihnen. Die Theorie dahinter ist, dass nur der Stapel hat alle die Informationen notwendig, um eine ordnungsgemäße timeout. Dennoch, einige Leute finden, dass der Wert der stack verwendet, ist zu lange für Ihre Anwendung; es kann eine minute oder länger.
Können Sie die send() und recv() timeouts mit dem SO_SNDTIMEO und SO_RCVTIMEO setsockopt () - Optionen. .
Anderen Winsock-Funktionen, die beste Lösung ist, um zu vermeiden, blockieren Steckdosen insgesamt. Alle non-blocking-socket-Methoden bieten Möglichkeiten, für die Sie zum erstellen von benutzerdefinierten timeouts:
Beachten Sie, dass mit asynchronen und nicht-blockierenden sockets, die Sie möglicherweise in der Lage zu vermeiden, Umgang mit timeouts zusammen. Ihr Programm weiter zu arbeiten, sogar während Winsock beschäftigt ist. Also, lassen Sie es bis zu dem Benutzer zum Abbrechen eines Vorgangs, der zu lange dauert, oder lass Winsock natürlichen timeout abläuft, anstatt über diese Funktion in Ihrem code.
InformationsquelleAutor Ben B