[Python-checkins] bpo-27456: Simplify sock type checks (#4922)

Yury Selivanov webhook-mailer at python.org
Tue Dec 19 06:44:45 EST 2017


https://github.com/python/cpython/commit/a7bd64c0c01379e9b82e86ad41a301329a0775d9
commit: a7bd64c0c01379e9b82e86ad41a301329a0775d9
branch: master
author: Yury Selivanov <yury at magic.io>
committer: GitHub <noreply at github.com>
date: 2017年12月19日T06:44:37-05:00
summary:
bpo-27456: Simplify sock type checks (#4922)
Recent sock.type fix (see bug 32331) makes sock.type checks simpler
in asyncio.
files:
M Lib/asyncio/base_events.py
M Lib/asyncio/selector_events.py
M Lib/asyncio/unix_events.py
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 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
 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 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
 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 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
 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 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
 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(
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
index 3f44a998b89..3b49b0cb928 100644
--- a/Lib/asyncio/selector_events.py
+++ b/Lib/asyncio/selector_events.py
@@ -41,7 +41,7 @@ def _test_selector_event(selector, fd, event):
 if hasattr(socket, 'TCP_NODELAY'):
 def _set_nodelay(sock):
 if (sock.family in {socket.AF_INET, socket.AF_INET6} and
- base_events._is_stream_socket(sock.type) and
+ sock.type == socket.SOCK_STREAM and
 sock.proto == socket.IPPROTO_TCP):
 sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
 else:
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
index 50d78c88545..2ab6b154b15 100644
--- a/Lib/asyncio/unix_events.py
+++ b/Lib/asyncio/unix_events.py
@@ -222,7 +222,7 @@ def _child_watcher_callback(self, pid, returncode, transp):
 if sock is None:
 raise ValueError('no path and sock were specified')
 if (sock.family != socket.AF_UNIX or
- not base_events._is_stream_socket(sock.type)):
+ sock.type != socket.SOCK_STREAM):
 raise ValueError(
 f'A UNIX Domain Stream Socket was expected, got {sock!r}')
 sock.setblocking(False)
@@ -276,7 +276,7 @@ def _child_watcher_callback(self, pid, returncode, transp):
 'path was not specified, and no sock specified')
 
 if (sock.family != socket.AF_UNIX or
- not base_events._is_stream_socket(sock.type)):
+ sock.type != socket.SOCK_STREAM):
 raise ValueError(
 f'A UNIX Domain Stream Socket was expected, got {sock!r}')
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /