From c937e0e6fee49285cb4ada15f7d99dbee7517f1f Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Tue, 15 Mar 2022 13:22:18 +0000 Subject: [PATCH] use sysconf --- Lib/asyncio/selector_events.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py index 1a8e156dd1c1528..3400b1227b17507 100644 --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -9,14 +9,12 @@ import collections import errno import functools +import itertools +import os import selectors import socket import warnings import weakref -try: - import ssl -except ImportError: # pragma: no cover - ssl = None from . import base_events from . import constants @@ -28,6 +26,10 @@ from . import trsock from .log import logger +HAVE_SENDMSG = hasattr(socket.socket, 'sendmsg') + +if HAVE_SENDMSG: + SC_IOV_MAX = os.sysconf('SC_IOV_MAX') def _test_selector_event(selector, fd, event): # Test if the selector is monitoring 'event' events @@ -899,7 +901,7 @@ def __init__(self, loop, sock, protocol, waiter=None, self._eof = False self._paused = False self._empty_waiter = None - if hasattr(socket.socket, 'sendmsg'): + if HAVE_SENDMSG: self._write_ready = self._write_sendmsg else: self._write_ready = self._write_send @@ -1070,12 +1072,15 @@ def write(self, data): self._buffer.append(data) self._maybe_pause_protocol() + def _get_sendmsg_buffer(self): + return itertools.islice(self._buffer, SC_IOV_MAX) + def _write_sendmsg(self): assert self._buffer, 'Data should not be empty' if self._conn_lost: return try: - n = self._sock.sendmsg(self._buffer) + n = self._sock.sendmsg(self._get_sendmsg_buffer()) self._adjust_leftover_buffer(n) except (BlockingIOError, InterruptedError): pass