Frage

Im Moment habe ich einen einfachen TCP Server / Client bekommt. Ich habe es so eingerichtet, dass, wenn ein Client eine Verbindung herstellt es gegabelt gets () und die Verbindung selbst ist in eine Endlosschleife gelegt, so dass die Verbindung offen bleibt. Der Server wird die Information von dem Client empfängt, habe ich einen Scheck, um sicherzustellen, dass die Anzahl der empfangenen Bytes ist> 0. Das bisher gut gearbeitet hat bei der Bestimmung, ob die Client-Verbindung beendet hat. Aber wenn der Server trennt der Client auch heruntergefahren, aber keine errno wird gesetzt. Wie kann ich den Server überprüfen, um sicherzustellen noch verbunden ist?

War es hilfreich?

Lösung

Wenn das andere Ende trennt, wird die Buchse lesbar werden (ein Lese auf Sockel blockiert nicht) und die read() kehrt 0. Das ist die übliche Art und Weise Abschaltung erkannt wird (es klingt wie Sie dies auf der Server-Seite bereits tun).

Wenn Sie in einem write() blockiert sind oder versuchen, auf einem Sockel mit dem anderen Ende geschlossen write, Ihr Prozess wird ein SIGPIPE Signal zu empfangen und write kehrt -1 mit errno auf EPIPE gesetzt.

Die Standardaktion für SIGPIPE ist es, den Prozess zu beenden, wenn Sie also nicht verändert haben, dass, wird Ihr Kunde nur sterben, wenn es versucht, auf einen Server zu schreiben, die weggegangen ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top