2010-08-07 5 views
31

J'ai un socket que je veux timeout lors de la connexion afin que je puisse annuler l'opération si elle ne peut pas encore se connecter, il veut aussi utiliser le makefile pour le socket qui ne nécessite aucun délai.Python socket connexion timeout

Y at-il un moyen facile de le faire ou est-ce que cela va être une chose difficile à faire?

Est-ce que python permet une remise à zéro de la temporisation après connecté afin que je puisse utiliser makefile et ont encore un délai d'attente pour la connexion socket

Répondre

56

Vous avez juste besoin d'utiliser la méthode prise settimeout() avant de tenter la connect(), s'il vous plaît noter que après la connexion, vous devez settimeout(None) pour mettre le socket en mode de blocage, ce qui est nécessaire pour le makefile. Voici le code que je utilise:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(10) 
sock.connect(address) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+5

Pour plus d'informations, le délai d'attente doit être exprimée en secondes. –

8

Si vous utilisez python2.6 ou plus récent, il est pratique d'utiliser socket.create_connection

sock = socket.create_connection(address, timeout=10) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+0

ne pas aider beaucoup pour socket unix – Pierrot