2012-04-10 9 views
11

Sono un principiante nei socket python e sono davvero turbato dalla testardaggine del metodo socket.accept(). Ho davvero bisogno di un modo per terminare un metodo socket.accept() o qualsiasi altra alternativa a socket.accept() che viene eseguita una sola volta. Qualcuno aiuto Plzzzz.Come fermare una chiamata a python socket.accept()?

+2

Si dovrebbe verificare la funzione 'socket.setblocking' e il modulo [' select'] (http://docs.python.org/library/select.html). –

risposta

10

Sono disponibili diverse opzioni qui:

  1. chiudere il socket di ascolto da un altro thread - il accept() solleva un'eccezione se fallisce.
  2. Apre una connessione locale alla presa di ascolto, il che rende il accept() ritorno di progettazione.
  3. Utilizzare un meccanismo di accettazione in grado di bloccare più di un oggetto di sincronizzazione in modo che l'attesa possa essere segnalata per il ritorno senza una connessione.
  4. Utilizzare un'alternativa non bloccante a accept(), (async come AcceptEx() e IO sovrapposto su Windows).
+0

In Python 'accept' genererà un'eccezione se fallisce. –

+0

@NiklasB. - Grazie. Non ho Python, ma la domanda OP è più un problema generale del server TCP e lo stesso insieme di "trucchi" è necessario in tutte le lingue. –

+0

Puoi fare un esempio perché come detto in precedenza sono un principiante .... in realtà sto scrivendo un server in pygtk. Il mio problema è che la finestra si blocca a causa della chiamata socket.accept(). – cybernerd

Problemi correlati