Necesito vaciar los datos en un socket (asegurándome de que no hay nada que recibir). Desafortunadamente, no hay una función para esto en el módulo de socket python.¿Cómo vaciar un socket en python?
he implementado algo así:
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)
¿Qué le parece? ¿Hay una mejor manera de hacer eso?
Actualización: No deseo cambiar el tiempo de espera del socket. Por eso prefiero seleccionar para leer.
Actualización: La pregunta original estaba usando el término 'flush'. Parece que 'vacío' es un término mejor.
Actualización - 2010-02-27: me he dado cuenta de un error cuando la pareja se ha cerrado. La entrada ya está llena con los sockets. Lo arreglé añadiendo un número máximo de bucles. ¿Hay una mejor solución?
esto no es realmente un "color" por decir. Eche un vistazo a los ejemplos en la documentación para leer un socket. http://docs.python.org/library/socket.html#example – JimB
¿Ha considerado utilizar Twisted para su programa? Si lo hicieras, nunca necesitarías hacer algo como esto. Twisted extraerá inmediatamente todos los datos del socket y se los entregará cada vez que llegue, por lo que no tendrá que preocuparse por detalles desagradables como el problema select() descrito por la respuesta de Thomas a continuación. – Glyph
@Glyph: No, no lo consideré Twisted porque quería usar el módulo de python estándar para evitar dependencias externas. Gracias por este comentario, miraré Twisted y tal vez reconsidere mi elección – luc