aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2017-12-19 06:44:37 -0500
committerGitHub <noreply@github.com>2017-12-19 06:44:37 -0500
commita7bd64c0c01379e9b82e86ad41a301329a0775d9 (patch)
tree142cbba8e3f45cc386120bc92d5241a141f7aaf7 /Lib/asyncio/base_events.py
parentbpo-32030: Fix compiler warnings (#4921) (diff)
downloadcpython-a7bd64c0c01379e9b82e86ad41a301329a0775d9.tar.gz
cpython-a7bd64c0c01379e9b82e86ad41a301329a0775d9.tar.bz2
cpython-a7bd64c0c01379e9b82e86ad41a301329a0775d9.zip
bpo-27456: Simplify sock type checks (#4922)
Recent sock.type fix (see bug 32331) makes sock.type checks simpler in asyncio.
Diffstat (limited to 'Lib/asyncio/base_events.py')
-rw-r--r--Lib/asyncio/base_events.py32
1 files changed, 6 insertions, 26 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 398497de09f..bd5bb32302a 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -82,26 +82,6 @@ def _set_reuseport(sock):
'SO_REUSEPORT defined but not implemented.')
-def _is_stream_socket(sock_type):
- if hasattr(socket, 'SOCK_NONBLOCK'):
- # Linux's socket.type is a bitmask that can include extra info
- # about socket (like SOCK_NONBLOCK bit), therefore we can't do simple
- # `sock_type == socket.SOCK_STREAM`, see
- # https://github.com/torvalds/linux/blob/v4.13/include/linux/net.h#L77
- # for more details.
- return (sock_type & 0xF) == socket.SOCK_STREAM
- else:
- return sock_type == socket.SOCK_STREAM
-
-
-def _is_dgram_socket(sock_type):
- if hasattr(socket, 'SOCK_NONBLOCK'):
- # See the comment in `_is_stream_socket`.
- return (sock_type & 0xF) == socket.SOCK_DGRAM
- else:
- return sock_type == socket.SOCK_DGRAM
-
-
def _ipaddr_info(host, port, family, type, proto):
# Try to skip getaddrinfo if "host" is already an IP. Users might have
# handled name resolution in their own code and pass in resolved IPs.
@@ -112,9 +92,9 @@ def _ipaddr_info(host, port, family, type, proto):
host is None:
return None
- if _is_stream_socket(type):
+ if type == socket.SOCK_STREAM:
proto = socket.IPPROTO_TCP
- elif _is_dgram_socket(type):
+ elif type == socket.SOCK_DGRAM:
proto = socket.IPPROTO_UDP
else:
return None
@@ -759,7 +739,7 @@ class BaseEventLoop(events.AbstractEventLoop):
if sock is None:
raise ValueError(
'host and port was not specified and no sock specified')
- if not _is_stream_socket(sock.type):
+ if sock.type != socket.SOCK_STREAM:
# We allow AF_INET, AF_INET6, AF_UNIX as long as they
# are SOCK_STREAM.
# We support passing AF_UNIX sockets even though we have
@@ -809,7 +789,7 @@ class BaseEventLoop(events.AbstractEventLoop):
allow_broadcast=None, sock=None):
"""Create datagram connection."""
if sock is not None:
- if not _is_dgram_socket(sock.type):
+ if sock.type != socket.SOCK_DGRAM:
raise ValueError(
f'A UDP Socket was expected, got {sock!r}')
if (local_addr or remote_addr or
@@ -1037,7 +1017,7 @@ class BaseEventLoop(events.AbstractEventLoop):
else:
if sock is None:
raise ValueError('Neither host/port nor sock were specified')
- if not _is_stream_socket(sock.type):
+ if sock.type != socket.SOCK_STREAM:
raise ValueError(f'A Stream Socket was expected, got {sock!r}')
sockets = [sock]
@@ -1060,7 +1040,7 @@ class BaseEventLoop(events.AbstractEventLoop):
This method is a coroutine. When completed, the coroutine
returns a (transport, protocol) pair.
"""
- if not _is_stream_socket(sock.type):
+ if sock.type != socket.SOCK_STREAM:
raise ValueError(f'A Stream Socket was expected, got {sock!r}')
transport, protocol = await self._create_connection_transport(