Wie kann ich überprüfen, ist ein socket ist noch offen?
Ich habe eine C++ - app, die verwendet das standard-socket-Aufrufe, und ich möchte wissen, wenn ich kann sagen, ob ein socket noch offen ist ohne das senden oder empfangen von beliebigen Daten. Gibt es eine zuverlässige select
oder ioctlsocket
Anruf, den ich machen kann?
- Meinst du prüfen, ob der socket geschlossen wurde, am anderen Ende?
- Ja. Meine app läuft auf Windows und wenn der PC sich im Ruhezustand befindet, wenn es gibt, dass das socket nicht mehr gültig, wie das andere Ende geschlossen ist es (und da meine app gesperrt ist, bekomme ich keine Benachrichtigung).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie versuchen, erhalten ein byte, können Sie receieve mehrere Fehler, wenn Sie einen nicht blockierenden socket, und versuchen Sie receieve auf eine gültige Verbindung, erhalten Sie die Fehlermeldung WSAEWOULDBLOCK.
Mit diesem wissen können wir überprüfen, einen nicht blockierenden socket wie so
wie Sie sehen können aus die Rückgabewert von recv recv möglicherweise ein timeout oder mehrere andere Fehler für die Verbindung trennen, ich glaub WSAEWOULDBLOCK ist der einzige Wert, den es möglicherweise zurück, wenn es ein Fehler war aber noch immer verbunden, aber Sie möchten überprüfen, dass die Liste der Werte zurück. Auch das flag wird in recv (MSG_PEEK -) bedeutet, dass die Daten noch Lesen können, wenn Sie gehen, um sich später nach der Prüfung, so dass Sie nicht brauchen, um sorgen über den Verlust eines byte von Daten.
Ich glaube, das funktioniert nur gut mit non-blocking sockets, wie es blockieren kann, bis es Daten empfängt. Wenn Sie verwenden möchten, blockieren Buchse möchten Sie vielleicht, um es nicht-block mit ioctlsocket, bevor Sie diese prüfen, dann schicken Sie es, wie es war.
Einen socket als "offen", hilft Ihnen nicht mit Ende-zu-Ende-Konnektivität. Der einzige Weg, um sicher wissen, dass Sie die Kommunikation mit dem anderen Ende ist, gut, die Kommunikation mit dem anderen Ende.
In jedes Protokoll, das Sie entwerfen, sollten Sie sich Gedanken über die Umsetzung dieser Prüfung Verhalten. Wenn es nicht das Protokoll, es gibt manchmal Möglichkeiten, es zu tun heimlich (z.B. FTP up eine sehr kleine, nutzlose Datei, um zu überprüfen, ob die FTP-ports sind auch noch offen).