Merge pull request #4343 from pallets/address-already-in-use

document "Adddress already in use" error
This commit is contained in:
David Lord 2021-11-16 09:05:33 -08:00 committed by GitHub
commit 776bf09fdf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 78 additions and 22 deletions

View file

@ -103,6 +103,11 @@ replaces the :meth:`Flask.run` method in most cases. ::
is provided for convenience, but is not designed to be particularly secure, is provided for convenience, but is not designed to be particularly secure,
stable, or efficient. See :doc:`/deploying/index` for how to run in production. stable, or efficient. See :doc:`/deploying/index` for how to run in production.
If another program is already using port 5000, you'll see
``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the
server tries to start. See :ref:`address-already-in-use` for how to
handle that.
Open a Shell Open a Shell
------------ ------------

View file

@ -83,6 +83,11 @@ deployment options see :doc:`deploying/index`.
Now head over to http://127.0.0.1:5000/, and you should see your hello Now head over to http://127.0.0.1:5000/, and you should see your hello
world greeting. world greeting.
If another program is already using port 5000, you'll see
``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the
server tries to start. See :ref:`address-already-in-use` for how to
handle that.
.. _public-server: .. _public-server:
.. admonition:: Externally Visible Server .. admonition:: Externally Visible Server

View file

@ -64,6 +64,47 @@ and using the CLI.
above. above.
.. _address-already-in-use:
Address already in use
~~~~~~~~~~~~~~~~~~~~~~
If another program is already using port 5000, you'll see an ``OSError``
when the server tries to start. It may have one of the following
messages:
- ``OSError: [Errno 98] Address already in use``
- ``OSError: [WinError 10013] An attempt was made to access a socket
in a way forbidden by its access permissions``
Either identify and stop the other program, or use
``flask run --port 5001`` to pick a different port.
You can use ``netstat`` to identify what process id is using a port,
then use other operating system tools stop that process. The following
example shows that process id 6847 is using port 5000.
.. tabs::
.. group-tab:: Linux/Mac
.. code-block:: text
$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python
.. group-tab:: Windows
.. code-block:: text
> netstat -ano | findstr 5000
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 6847
MacOS Monterey and later automatically starts a service that uses port
5000. To disable the service, got to System Preferences, Sharing, and
disable "AirPlay Receiver".
Lazy or Eager Loading Lazy or Eager Loading
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~

View file

@ -177,4 +177,9 @@ Visit http://127.0.0.1:5000/hello in a browser and you should see the
"Hello, World!" message. Congratulations, you're now running your Flask "Hello, World!" message. Congratulations, you're now running your Flask
web application! web application!
If another program is already using port 5000, you'll see
``OSError: [Errno 98]`` or ``OSError: [WinError 10013]`` when the
server tries to start. See :ref:`address-already-in-use` for how to
handle that.
Continue to :doc:`database`. Continue to :doc:`database`.

View file

@ -57,29 +57,29 @@ By the end, your project layout will look like this:
/home/user/Projects/flask-tutorial /home/user/Projects/flask-tutorial
├── flaskr/ ├── flaskr/
   ├── __init__.py ├── __init__.py
   ├── db.py ├── db.py
   ├── schema.sql ├── schema.sql
   ├── auth.py ├── auth.py
   ├── blog.py ├── blog.py
   ├── templates/ ├── templates/
   │ ├── base.html │ ├── base.html
   │ ├── auth/ │ ├── auth/
   │ │   ├── login.html │ │ ├── login.html
   │ │   └── register.html │ │ └── register.html
   │ └── blog/ │ └── blog/
   │ ├── create.html │ ├── create.html
   │ ├── index.html │ ├── index.html
   │ └── update.html │ └── update.html
   └── static/ └── static/
      └── style.css └── style.css
├── tests/ ├── tests/
   ├── conftest.py ├── conftest.py
  ├── data.sql ├── data.sql
   ├── test_factory.py ├── test_factory.py
   ├── test_db.py ├── test_db.py
  ├── test_auth.py ├── test_auth.py
  └── test_blog.py └── test_blog.py
├── venv/ ├── venv/
├── setup.py ├── setup.py
└── MANIFEST.in └── MANIFEST.in