asyncio: Fix getaddrinfo to accept service names (for port)

Patch by A. Jesse Jiryu Davis
This commit is contained in:
Yury Selivanov 2016-06-02 16:51:07 -04:00
parent a8f895f051
commit a714616d36
2 changed files with 39 additions and 3 deletions

View file

@ -102,10 +102,26 @@ def _ipaddr_info(host, port, family, type, proto):
else:
return None
if port in {None, '', b''}:
if port is None:
port = 0
elif isinstance(port, (bytes, str)):
port = int(port)
elif isinstance(port, bytes):
if port == b'':
port = 0
else:
try:
port = int(port)
except ValueError:
# Might be a service name like b"http".
port = socket.getservbyname(port.decode('ascii'))
elif isinstance(port, str):
if port == '':
port = 0
else:
try:
port = int(port)
except ValueError:
# Might be a service name like "http".
port = socket.getservbyname(port)
if hasattr(socket, 'inet_pton'):
if family == socket.AF_UNSPEC: