Flask - socket.error: [Errno 10053] An established connection was aborted by the software in your host machine

11,051

This is an issue with the Python 2 implementation of the SocketServer module, it is not present in Python 3 (where the server keeps on serving).

Your have 3 options:

  • Don't use the built-in server for production systems (it is a development server after all). Use a proper WSGI server like gunicorn or uWSGI,
  • Enable threaded mode with app.run(threaded=True); the thread dies but a new one is created for future requests,
  • Upgrade to Python 3.
Share:
11,051
tonysepia
Author by

tonysepia

Updated on June 15, 2022

Comments

  • tonysepia
    tonysepia almost 2 years

    Re-opening this question upon request (error: [Errno 10053]), providing the minimal testable example:

    import time
    from flask import Flask, render_template
    app = Flask(__name__, static_folder='static', template_folder='templates')
    
    @app.route('/')
    def main():
        return render_template('test.html')
    
    @app.route('/test')
    def test():
        print "Sleeping. Hit Stop button in browser now"
        time.sleep(10)
        print "Woke up. You should see a stack trace from the problematic exception below."
        return render_template('test.html')
    
    if __name__ == '__main__':
        app.run()
    

    HTML:

    <html>
    <body>
    <a href="/test">test</a>
    </body>
    </html>
    

    Guide: Run the app, navigate to localhost:port, click on the link, then hit Stop button in your browser. You should see the exception once the sleep finishes. The sleep is necessary to simulate any sort of activity happening on the server. It could be just a few seconds: if user manages to navigate away from the page - Flask will crash.

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

    Why does the server stop serving the application? What other server can I use for my Flask application to avoid this?

  • tonysepia
    tonysepia over 7 years
    Confirming: upgraded to Python3 and the issue is no longer present. Thank you!
  • CoolCK
    CoolCK over 5 years
    I'm using Python3 in my virtual environment, still I get this in my Django app.
  • Martijn Pieters
    Martijn Pieters over 5 years
    @CoolCK: without a minimal reproducible example I can't help you, sorry.