Überprüfen Socket-File-Deskriptor zur Verfügung steht?
Wenn ich noch ein filedescriptor (socket fd), zu prüfen, wie diese fd ist verfügbar für Lesen/schreiben?
In meiner situation, die client hat Verbindung zum server und wir kennen die fd.
Der server wird jedoch die Verbindung der Buchse, gibt es irgendwelche Hinweise, um es zu überprüfen ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst
fcntl()
zu überprüfen, für Lesen/schreiben von Einstellungen auf der fd:Aber das ist ein weiteres Problem, wenn die Steckdose nicht mehr angeschlossen. Wenn Sie bereits
select()
oderpoll()
dann bist du fast da.poll()
wird Rückgabestatus schön, wenn Sie angebenPOLLERR
imevents
und überprüfen Sie es inrevents
.Wenn Sie im normal-blocking I/O und dann nur behandeln die lese - /schreib-Fehler, wie Sie kommen und sich anmutig.
Können Sie
select()
oderpoll()
für diese.In C#, diese Frage beantwortet hier
Im Allgemeinen, Steckdose trennen ist asynchron und muss abgefragt werden, in irgendeiner Weise. Eine asynchrone read auf dem socket wird in der Regel zurück, wenn es geschlossen ist, als auch, so dass Sie eine chance, um auf die änderung des status schneller. Winsock (Windows) die Fähigkeit hat, um sich zu registrieren und erhalten eine Benachrichtigung von einem trennen (aber auch dies kann nicht passieren, für eine lange Zeit nach der anderen Seite "verschwindet", es sei denn, Sie verwenden irgendeine Art von 'keepalive' (SO_KEEPALIVE, die standardmäßig nicht bemerken, für Stunden, oder ein application-level-Takt).
Fand ich die "recv" - Vorgang überprüfen können. wenn socket fd ist schlecht, einige errno wird gesetzt.
Gut, Sie könnte anrufen, wählen Sie(). Wenn der server getrennt hat, ich glaube, du wirst irgendwann einen Fehler-code zurückgegeben... Wenn nicht, können Sie auswählen (), um zu sagen, ob Sie Netzwerk-stack bereit ist, weitere Daten zu senden (oder empfangen).
select
auslösen können, sind die exceptfds argument, wenn die Gegenstelle die Verbindung getrennt, aber keine Fehler.