Wie leer ein socket in python?

Muss ich leeren Sie die Daten auf einem socket (sicherstellen, dass es nichts zu erhalten).
Leider gibt es keine Funktion in der python-socket-Modul.

Habe ich umgesetzt, etwas so:

def empty_socket(sock):
    """remove the data present on the socket"""
    input = [sock]
    while 1:
        inputready, o, e = select.select(input,[],[], 0.0)
        if len(inputready)==0: break
        for s in inputready: s.recv(1)

Was denkst du? Gibt es eine bessere Weise, das zu tun?


Update: ich will nicht zu ändern Sie das socket-timeout. Was ist der Grund, warum ich lieber wählen, um gelesen zu werden.


Update: Die ursprüngliche Frage war mit dem "flush" Begriff. Es scheint, dass 'leer' ist ein besserer Begriff.


Update - 2010-02-27 :
Ich habe bemerkt einen Fehler, wenn das paar hat sich geschlossen. Die inputready ist immer gefüllt mit den sockets. Ich behoben, indem eine maximale Anzahl von loops. Gibt es eine bessere Lösung?

  • das ist nicht wirklich ein "flush" pro sagen. Werfen Sie einen Blick auf die Beispiele in der Dokumentation für das Lesen von einem socket. docs.python.org/library/socket.html#example
  • Haben Sie sich überlegt, Verdrillte für Ihr Programm stattdessen? Wenn Sie es wüssten, würden Sie nie brauchen, um zu tun etwas wie dieses. Verdreht sofort ziehen alle Daten aus der Steckdose und stellen es Ihnen immer, wenn einer ankommt, so brauchen Sie nicht, um Chaos über mit hässlichen details wie die select () - problem beschrieben durch Thomas ' Antwort unten.
  • Nein, ich habe nicht betrachten Sie Verdreht, weil ich wollte, dass die standard-python-Modul, um zu vermeiden, dass externe Abhängigkeiten. Vielen Dank für diesen Kommentar, ich werde schauen, Twisted und vielleicht überdenken, meine Wahl
InformationsquelleAutor luc | 2009-07-08
Schreibe einen Kommentar