web-dev-qa-db-fra.com

erreur: [Errno 10053]

Si je code sur Flask, j'obtiens parfois l'erreur suivante:

Traceback (most recent call last):
  File "C:\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Python27\lib\SocketServer.py", line 640, in __init__
    self.finish()
  File "C:\Python27\lib\SocketServer.py", line 693, in finish
    self.wfile.flush()
  File "C:\Python27\lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] ��������� �� ����� ����-

Des idées pourquoi ceci se produirait (win8 x64, python27 x32)? 

19
Patrick Burns

À partir de la liste Codes d’erreur Windows Sockets /:

WSAECONNABORTED 10053
Le logiciel a provoqué la déconnexion.
Une connexion établie a été interrompue par le logiciel sur votre ordinateur hôte, probablement en raison d'un délai de transmission des données ou d'une erreur de protocole.

Il y a eu un dépassement de délai ou une autre erreur au niveau du réseau. C'est votre système d'exploitation qui ferme le socket, rien à voir avec Python ou Flask, vraiment.

Cela peut être le navigateur distant qui a cessé de répondre, la connexion réseau est morte ou un pare-feu a fermé la connexion parce qu'elle était ouverte trop longtemps, ou tout autre raison.

21
Martijn Pieters

Bonjour, Il s'agit d'un problème d'implémentation du module SocketServer dans Python 2, il n'est pas présent dans Python 3 (où le serveur continue à servir).  

Vous avez 3 options:

N'utilisez pas le serveur intégré pour les systèmes de production (c'est un serveur de développement, après tout). Utilisez un serveur WSGI approprié tel que gunicorn ou uWSGI.

Activer le mode threadé avec app.run (threaded = True); le fil meurt mais un nouveau est créé pour les demandes futures,

Passez à Python 3.

Donc, chaque fois qu'il y a une erreur comme 

error: [Errno 10053] An established connection was aborted by the software in your Host machine

Le serveur serait redémarré si vous aviez fait comme app.run (threaded = True).

9
Keyur

J'ai récemment rencontré ce message d'erreur en essayant d'utiliser Flask pour servir des fichiers audio. Je reçois ce message d'erreur chaque fois que le client ferme le flux avant la fin du flux. Flask continue d'essayer d'écrire des données dans le flux, mais comme le socket sous-jacent a été déconnecté, il ne le peut pas. Ce n'est pas réellement un error en soi, mais plutôt un message vous informant que la connexion au client a été fermée avant que Flask n'ait fini d'écrire des données dans le flux.

4
Nop

Je viens de vivre exactement le même problème. Contrairement à la réponse la plus votée, le problème a beaucoup à voir avec Python et Flask, et ce n’est pas un problème Windows . Très facile à reproduire:

  • Cliquez sur un lien dans une application de flacon, puis accédez à une autre page pendant le chargement de la première. Une erreur apparaît à chaque fois et l'application se bloque (doit être redémarrée)
  • Le problème ne se produit jamais si j'autorise le serveur à renvoyer la page complètement. 

En outre, cela n’est jamais arrivé avec le micro-cadre de bouteille, par exemple.

Si je découvre comment résoudre le problème, je vous le ferai savoir.

3
Tony Sepia

J'ai rencontré ce problème lors de la lecture de la réponse d'un serveur Web. Dans mon cas, le problème était que je fermais la connexion de socket trop tôt, ce qui a interrompu les communications . Je dors donc quelques secondes avant de recevoir des données, puis ferme la connexion de socket.

time.sleep(10)
data = s.recv(1024)
s.close()

Ça marche pour moi.

2
Dabay Wang

Cette erreur peut se produire indépendamment de Flask, Python 2, Python 3 ou HTTP - elle peut se produire simplement au niveau du socket et cela dépendra dans une grande mesure de votre situation exacte. 

Par exemple, mon application utilise un périphérique/appareil Ethernet qui utilise des sockets bruts pour le contrôle et le contrôle et j'utilise la méthode create_connection dans le module socket. J'obtiendrais systématiquement "Errno 10053" après avoir essayé d'envoyer un message après une période d'inactivité du trafic. Les tests de synchronisation ont montré que cette erreur se produirait après avoir tenté d'envoyer un message après quatre minutes d'inactivité. La page suivante indique un délai d’expiration de 240 secondes = 4 minutes:

https://support.Microsoft.com/en-us/help/170359/how-to-modify-the-tcp-ip-ip-maximum-retransmission- time-out

La solution dans mon scénario consistait à faire en sorte que les messages envoyés au périphérique ne s'étendent pas sur plus de quatre minutes. J'envoie simplement un petit message de requête au périphérique toutes les 60 secondes pour éviter l'erreur 10053 - il agit comme un protocole "persistant" au niveau du protocole (sans rapport avec TCP keepalive). Dans ce scénario, le problème est peut-être spécifique au périphérique Ethernet et à la façon dont il a implémenté TCP. Néanmoins, un "maintien en vie" au niveau du protocole peut être une option viable dans de nombreux cas.

0
rob_7cc

C'est une erreur PIPE, qui se produit si le serveur répond à une demande et que le client a déjà fermé la connexion. Les navigateurs le font parfois en fonction de l'utilisation ... Vous pouvez les ignorer, les serveurs Web adaptés à la production le feront certainement.

0
jayant singh