Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python 3.14.0a2 should have raised exception when a socket is already in used, shouldn't it? #127319

Open
rayluo opened this issue Nov 27, 2024 · 3 comments
Labels
3.14 new features, bugs and security fixes stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error

Comments

@rayluo
Copy link

rayluo commented Nov 27, 2024

Bug report

Bug description:

In earlier versions of Python all the way to 3.13, it would not allow a server to listen on a port that has already been used, and rightfully so.

$ python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

# Trying to start the second server on the same port
$ python -m http.server 8000
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.11/http/server.py", line 1309, in <module>
    test(
  File "/usr/lib/python3.11/http/server.py", line 1256, in test
    with ServerClass(addr, HandlerClass) as httpd:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socketserver.py", line 456, in __init__
    self.server_bind()
  File "/usr/lib/python3.11/http/server.py", line 1303, in server_bind
    return super().server_bind()
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/server.py", line 136, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/lib/python3.11/socketserver.py", line 472, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

But in Python 3.14.0a2, the second command would also start a server without exception. Is that expected?

CPython versions tested on:

3.14

Operating systems tested on:

Linux

@rayluo rayluo added the type-bug An unexpected behavior, bug, or error label Nov 27, 2024
@skirpichev skirpichev added the stdlib Python modules in the Lib dir label Nov 27, 2024
@skirpichev
Copy link
Member

I confirm this in the main. It seems, for two processes, the last started process - serves requests. If it's terminated - works the first.

At least, seems as a documentation issue for me (nothing in news).

@oskar-skog
Copy link

I believe it's caused by this commit:
192d17c

See also comment: #120485 (comment)
Maybe allow_reuse_port should default to False?

@AlexWaygood AlexWaygood added the 3.14 new features, bugs and security fixes label Nov 27, 2024
@rayluo
Copy link
Author

rayluo commented Nov 27, 2024

I confirm this in the main. It seems, for two processes, the last started process - serves requests. If it's terminated - works the first.

At least, seems as a documentation issue for me (nothing in news).

Based on #120485 (comment) (thanks for the finding, @oskar-skog ), "the kernel may dispatch the request to different server process randomly", which is concerning.

Maybe allow_reuse_port should default to False?

+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.14 new features, bugs and security fixes stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

4 participants