2012-04-10 19 views
11

Soy un novato en sockets de pitón y estoy realmente preocupado por la terquedad del método socket.accept(). Realmente necesito una forma de terminar un método socket.accept() o cualquier otra alternativa a socket.accept() que se ejecute solo una vez. Plzzzz alguien ayuda.Cómo detener una llamada python socket.accept()?

+2

Debería verificar la función 'socket.setblocking' y el módulo [' select'] (http://docs.python.org/library/select.html). –

Respuesta

10

usted tiene varias opciones aquí:

  1. Cerrar el socket de escucha del otro hilo - el accept() lanzará una excepción si falla.
  2. Abra una conexión local a la toma de audición; eso hace que el accept() regrese por diseño.
  3. Utilice un mecanismo de aceptación que pueda bloquear en más de un objeto de sincronización para que se pueda señalar que la espera se devuelve sin una conexión.
  4. Utilice una alternativa sin bloqueo a accept(), (async como AcceptEx() y IO superpuesto en Windows).
+0

En Python 'accept' se generará una excepción si falla. –

+0

@NiklasB. - Gracias. No tengo ningún Python, pero la pregunta OP es más un problema general del servidor TCP y se necesita el mismo conjunto de 'trucos' en todos los idiomas. –

+0

Puedes dar un ejemplo porque como dije antes soy un novato ... en realidad estoy escribiendo un servidor en pygtk. Mi problema es que la ventana se cuelga debido a la llamada socket.accept(). – cybernerd

Cuestiones relacionadas