2011-09-08 10 views
7

Pregunta: ¿Hay algún tipo de tiempo de espera o interrupción de la función socket.accept() en python?objeto python socket accept time out


Info:

Tengo un programa que tiene un hilo hijo con destino a un puerto y constantemente aceptar y cuidar y pasarlos a una cola para el hilo principal. En este momento estoy tratando de hacer que el hilo hijo interrumpa para que pueda deconstruir apropiadamente. Creo que es posible para mí simplemente detener el hilo hijo y hacer que el padre deconstruya al niño, pero hay otras veces en las que quiero poder regresar temprano, así que decidí que ese sería el enfoque más útil.

Entonces, ¿hay alguna manera de que pueda tener un tiempo de espera o cancelar el método de aceptación para que el hilo pueda regresar sin tener algo conectado primero?

Respuesta

8

Puede establecer el tiempo de espera predeterminado con

import socket 
print socket.getdefaulttimeout() 
socket.setdefaulttimeout(60) 

yo sepa Esto afectará todo la operación de socket

+0

¿Lo hará? De acuerdo. cuando leí la documentación me hizo sonar como que solo efectué el envío y recepción. ¡Gracias! – Narcolapser

2

Puede utilizar settimeout() como en este ejemplo:

import socket 

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
tcpServer.bind(('0.0.0.0', 10000)) # IP and PORT 

stopped = False 
while not stopped: 
    try: 
    tcpServer.settimeout(0.2) # timeout for listening 
    tcpServer.listen(1) 
    (conn, (ip, port)) = tcpServer.accept() 
    except socket.timeout: 
    pass 
    except: 
    raise 
    else: 
    # work with the connection, create a thread etc. 
    ... 

El bucle se ejecutará hasta que stopped se establezca en verdadero y luego salga después (como máximo) del tiempo de espera que haya establecido. (En mi aplicación, paso el asa de conexión a un subproceso recién creado y continúo el ciclo para poder aceptar más conexiones simultáneas.)