From a02ba743338c27fd9348af2cf7767b140501734d Mon Sep 17 00:00:00 2001 From: I-question-this Date: Fri, 21 Apr 2023 16:53:58 -0500 Subject: socket: use poll() instead of select() except on Windows (#2865) Fixes #2278, which was originally addressed in #2279, but was not properly merged. Additionally it did not address the problem of poll not existing on Windows. This patch falls back on the more limited select method if host system is Windows. Signed-off-by: Tyler Westland --- docker/utils/socket.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docker/utils/socket.py b/docker/utils/socket.py index 47cb44f..3c31a98 100644 --- a/docker/utils/socket.py +++ b/docker/utils/socket.py @@ -3,6 +3,7 @@ import os import select import socket as pysocket import struct +import sys try: from ..transport import NpipeSocket @@ -31,7 +32,13 @@ def read(socket, n=4096): recoverable_errors = (errno.EINTR, errno.EDEADLK, errno.EWOULDBLOCK) if not isinstance(socket, NpipeSocket): - select.select([socket], [], []) + if sys.platform == 'win32': + # Limited to 1024 + select.select([socket], [], []) + else: + poll = select.poll() + poll.register(socket) + poll.poll() try: if hasattr(socket, 'recv'): -- cgit v1.2.1