Wie kann ich wake wählen Sie() auf eine Steckdose in der Nähe?

Ich bin derzeit mit select-Schleife zu verwalten sockets in einem proxy. Eine der Anforderungen, die von diesem proxy ist, dass, wenn der proxy sendet eine Nachricht an die externe server und nicht bekommen, eine Antwort in einer bestimmten Zeit, der proxy sollte in der Nähe, die Buchse und versuchen, eine Verbindung zu einem sekundären server. Das schließen geschieht in einem eigenen thread, während die select-thread blockiert wartet auf Aktivität.

Ich habe ein Problem, herauszufinden, wie um zu erkennen, dass das socket geschlossen ist konkret, damit kann ich mit dem Fehler. Wenn ich den Aufruf von close() in den anderen thread, bekomme ich eine EBADF, aber ich kann nicht sagen, welcher socket geschlossen. Ich versuchte zu erkennen, die Buchse durch die Ausnahme fdset, dachte, es würde enthalten die geschlossene Buchse, aber ich bin nicht immer etwas zurückgekehrt. Ich habe auch gehört, dass der Aufruf von shutdown() sendet ein FIN auf dem server und erhalten eine FLOSSE zurück, so dass ich es schließen können; aber der springende Punkt ist, dass ich versuchen könnte, um diese zu schließen als Folge nicht bekommen, eine Antwort innerhalb der timeout-Zeit, so kann ich nicht tun, entweder.

Wenn meine Annahmen hier falsch sind, lass es mich wissen. Irgendwelche Ideen würde geschätzt.

BEARBEITEN:
In Reaktion auf die Vorschläge über die Verwendung von select time-out: ich muss die Schließung asynchron, da der client die Verbindung zu den proxy mal aus und ich kann nicht warten, um für die select-abgefragt werden. Dies würde nur funktionieren, wenn ich die Auswahl sehr klein, das würde dann ständig abrufen und verschwenden Ressourcen, die ich nicht will.

InformationsquelleAutor Doldrim | 2009-08-25
Schreibe einen Kommentar