twisteroid ambassador <twisteroid.ambassa...@gmail.com> added the comment:

I just noticed that in the socket module, an AF_INET address tuple is allowed 
to have an unresolved host name. Quote:

A pair (host, port) is used for the AF_INET address family, where host is a 
string representing either a hostname in Internet domain notation like 
'daring.cwi.nl' or an IPv4 address like '100.50.200.5', and port is an integer.

https://docs.python.org/3/library/socket.html#socket-families

Passing a tuple of (hostname, port) to socket.connect() successfully connects 
the socket (tested on Windows). Since the C struct sockaddr_in does not support 
hostnames, socket.connect obviously does resolution at some point, but its 
implementation is in C, and I haven't looked into it.

BaseSelectorEventLoop.sock_connect() calls socket.connect() directly, therefore 
it also supports passing in a tuple of (hostname, port). I just tested 
ProactorEventLoop.sock_connect() on 3.7.1 on Windows, and it does not support 
hostnames, raising OSError: [WinError 10022] An invalid argument was supplied.

I personally believe it's not a good idea to allow hostnames in address tuples 
and in sock.connect(). However, the socket module tries pretty hard to 
basically accept any (host, port) tuple as address tuples, whether host is an 
IPv4 address, IPv6 address or host name, so that's probably not going to change.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35545>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to