From 08ec53fcb0aada757071ee534de901dce0c14b69 Mon Sep 17 00:00:00 2001 From: Rouven Bauer Date: Tue, 19 Oct 2021 15:38:47 +0200 Subject: [PATCH] Use selectors.DefaultSelector over select.select select.select, while being available on many platforms has the drawback of not being very modern. On some Linux systems, for instance, it is limited to 1024 open file descriptors. Python offers a nice wrapper to choose the best way for each OS to poll sockets named selectors.DefaultSelector. --- neo4j/io/__init__.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/neo4j/io/__init__.py b/neo4j/io/__init__.py index 40644e72..d4f6aead 100644 --- a/neo4j/io/__init__.py +++ b/neo4j/io/__init__.py @@ -41,7 +41,7 @@ ) from logging import getLogger from random import choice -from select import select +import selectors from socket import ( AF_INET, AF_INET6, @@ -1326,8 +1326,9 @@ def _handshake(s, resolved_address): # Handle the handshake response ready_to_read = False - while not ready_to_read: - ready_to_read, _, _ = select((s,), (), (), 1) + with selectors.DefaultSelector() as selector: + selector.register(s, selectors.EVENT_READ) + selector.select(1) try: data = s.recv(4) except OSError: