New submission from Nathaniel Smith:
socket.getaddrinfo accepts None as a port argument, and translates it into 0.
This is handy, because bind() understands 0 to mean "pick a port for me", and
if you want bind to pick a port for you and port=None is a slightly more
obvious way to say that then port=0.
For example:
>>> socket.getaddrinfo("127.0.0.1", None)
[(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('127.0.0.1',
0)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_DGRAM: 2>, 17, '',
('127.0.0.1', 0)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_RAW: 3>, 0,
'', ('127.0.0.1', 0))]
socket.getaddrinfo also accepts None as a host name; this is necessary because
the underlying getaddrinfo(3) call has special handling for host=NULL, and we
need some way to access it:
>>> socket.getaddrinfo(None, 0)
[(<AddressFamily.AF_INET6: 10>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('::1', 0,
0, 0)), (<AddressFamily.AF_INET6: 10>, <SocketKind.SOCK_DGRAM: 2>, 17, '',
('::1', 0, 0, 0)), (<AddressFamily.AF_INET6: 10>, <SocketKind.SOCK_RAW: 3>, 0,
'', ('::1', 0, 0, 0)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM:
1>, 6, '', ('127.0.0.1', 0)), (<AddressFamily.AF_INET: 2>,
<SocketKind.SOCK_DGRAM: 2>, 17, '', ('127.0.0.1', 0)), (<AddressFamily.AF_INET:
2>, <SocketKind.SOCK_RAW: 3>, 0, '', ('127.0.0.1', 0))]
However, even though both of these features are supported separately... if you
try to use them *together*, then socket.getaddrinfo errors out:
>>> socket.getaddrinfo(None, None)
socket.gaierror: [Errno -2] Name or service not known
I expected that last call to be equivalent to socket.getaddrinfo(None, 0).
----------
components: Extension Modules
messages: 300236
nosy: njs
priority: normal
severity: normal
status: open
title: getaddrinfo: inconsistent handling of port=None
versions: Python 3.7
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue31198>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com