active network handle test?

09/08/2010 - 11:09 von Ulli Horlacher | Report spam
Wie teste ich eigentlich ob ein network handle noch aktiv ist?
Also ohne Daten zu lesen oder zu schreiben, denn das wuerde die weitere
Kommunikation stoeren.

Mein Programm wird vom xinetd gestartet, entsprechend ist das network
handle STDIN bzw STDOUT.
Wie bekomme ich da mit, ob der Client "aufgelegt hat"?

Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum E-Mail: horlacher@rus.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-685-65868
Allmandring 30 Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.rus.uni-stuttgart.de/
 

Lesen sie die antworten

#1 Peter J. Holzer
09/08/2010 - 13:52 | Warnen spam
On 2010-08-09 09:09, Ulli Horlacher wrote:
Wie teste ich eigentlich ob ein network handle noch aktiv ist?
Also ohne Daten zu lesen oder zu schreiben, denn das wuerde die weitere
Kommunikation stoeren.

Mein Programm wird vom xinetd gestartet, entsprechend ist das network
handle STDIN bzw STDOUT.
Wie bekomme ich da mit, ob der Client "aufgelegt hat"?



Es stellt sich die Frage, ob die Anforderung "ohne Lesen und Schreiben"
sinnvoll ist. Was willst Du denn machen, wobei Du wissen musst, ob die
Verbindung existiert, ohne zu lesen oder zu schreiben?

Für die Leserichtung kannst Du select und sysread verwenden.

Wenn select ohne Timeout zurückkehrt, dann kannst Du lesen, ohne zu
blockieren. D.h., entweder, der Client hat was geschickt, oder er hat
sein Schreibende geschlossen - unterscheiden kannst Du das nur, indem Du
wirklich liest. Aber es fàllt mir schwer, eine Situation zu
konstruieren, wo das ein Problem sein könnte.
Wenn select mit Timeout zurückkehrt, gibt es nichts zu lesen und die
Verbindung existiert noch.

Die Schreibrichtung kannst Du m.W. nur testen, indem Du schreibst. Aber
auch hier sehe ich das Problem nicht.

hp

Ähnliche fragen