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 <rep...@bugs.python.org>
<http://bugs.python.org/issue31198>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to