web-dev-qa-db-fra.com

Délai de connexion au socket Python

J'ai un socket que je veux expirer lors de la connexion afin que je puisse annuler toute l'opération s'il ne peut pas se connecter mais il veut aussi utiliser le fichier makefile pour le socket qui ne nécessite pas de timeout. 

Y a-t-il un moyen facile de faire ceci ou est-ce que ce sera une chose difficile à faire?

Python autorise-t-il une réinitialisation du délai après connexion afin que je puisse utiliser makefile tout en conservant un délai pour la connexion socket?

43
anonymous

Il vous suffit d’utiliser la méthode socket settimeout() avant de tenter la fonction connect(), veuillez noter qu’après la connexion, vous devez settimeout(None) pour définir le socket en mode de blocage, ce qui est nécessaire pour le fichier makefile . en utilisant:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect(address)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
78
João Pinto

Si vous utilisez Python2.6 ou une version plus récente, utilisez socket.create_connection

sock = socket.create_connection(address, timeout=10)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
13
John La Rooy

Pour définir le délai d’exécution du socket, vous devez suivre ces étapes:

import socket
socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.settimeout(10.0)
0
Himanshu Kanojiya