Comment arrêter un python de socket.appel accept ()?
Je suis un débutant en python sockets et je suis vraiment troublé par l'entêtement de la socket.méthode accept (). J'ai vraiment besoin d'un moyen de mettre fin à une prise de courant.méthode accept() ou de toute autre alternative à la prise.accept() qui exécute une seule fois. Plzzzz quelqu'un de l'aide.
- Vous devriez vérifier le
socket.setblocking
de la fonction et de laselect
module.
Vous devez vous connecter pour publier un commentaire.
Vous disposez de plusieurs options ici:
accept()
va lever une exception en cas d'échec.accept()
retour par la conception.accept()
, (async commeAcceptEx()
et se chevauchent IO sur Windows).accept
va lever une exception en cas d'échec.quit_now
style de drapeau dans le accepter la boucle, puis en le connectant (2) au déclenchement d'un retour d'accept() fonctionne très bien.De donner des précisions sur la réponse précédente.
Si vous avez, disons, de créer un simple socket server thread comme suit:
Et puis, il arrive qu'il n'y a pas de clients, mais le fil continue de fonctionner parce que le
sock.accept
blocs, vous pouvez ajoutez la méthode suivante à la classeSocketServerThread
ci-dessus pour arrêter le fil de blocage:Ensuite, vous pouvez utiliser le fil comme suit:
Noter que le code suppose qu'une fois que vous décidez de ne pas accepter des clients, un client ne peut plus se connecter. Si un autre client se connecte entre le
if self.sock_conn is None
et
with socket.socket
lignes, vous obtiendrez unConnection refused
, et aurez à gérer de manière appropriée. Si vous avez un contrôle serré des clients, cependant, cela devrait être suffisant.