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 <tylerofthewest@gmail.com>
This commit is contained in:
I-question-this 2023-04-21 16:53:58 -05:00 committed by GitHub
parent aaf68b7f98
commit a02ba74333
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 1 deletions

View File

@ -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'):