Socket: Abbruch feststellen.

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Dienstag 26. Juli 2005, 14:30

Hallo,

wie hier erläutert bin ich dabei einen Mailinglistenserver zu schreiben. Der Server nutzt einen Socket um mit dem Client zu kommunzieren. Da zwängt sich mir im Moment eine Frage auf. Wie kann ich rausbekommen, oder Client den Socket nicht schon geschlossen hat (z.B. in dem er Putty / telnet zu gemacht hat).

Im Moment löse ich das mit einer kleinen Methode:

Code: Alles auswählen

    def __socketIsValid(self):
        try:
            peername = self.__clientsocket.getpeername()
            return True
        except:
            self.__connectionEstablished = False
            return False
Das kann aber nicht der Weisheit letzter Schluss sein, oder?

Edit (Leonidas): Code in Python-Tags gesetzt.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Dienstag 26. Juli 2005, 14:50

Wenn recv Null zurück gibt, dann wurde die Verbindung getrennt.

Folgender Code aus einem Python Beispiel:

Code: Alles auswählen

while 1:
    data = conn.recv(1024)
    if not data: break
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Dienstag 2. August 2005, 10:11

Danke für denTipp, aber das funktioniert nicht ganz. Dadurch wird ja ständig eingelesen, auch wenn der Client mal nichts eingibt. Dann würde die Verbindung abbrechen. Ich habs jetzt erstmal so gelassen wie es oben ist. Es funktioniert ja und solange sich nichts eleganteres findet.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Dienstag 2. August 2005, 11:35

nbkr hat geschrieben:Dadurch wird ja ständig eingelesen, auch wenn der Client mal nichts eingibt. Dann würde die Verbindung abbrechen.
Das ist Falsch. recv wartet, bis der Client etwas eingibt, oder die Verbindung getrennt wird.

Wenn du wissen willst, wie man es normalerweise macht, dann schau dir mal das Socket Howto an.
Antworten