Skip to content

Commit c937e0e

Browse files
use sysconf
1 parent a52319d commit c937e0e

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

Lib/asyncio/selector_events.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@
99
import collections
1010
import errno
1111
import functools
12+
import itertools
13+
import os
1214
import selectors
1315
import socket
1416
import warnings
1517
import weakref
16-
try:
17-
import ssl
18-
except ImportError: # pragma: no cover
19-
ssl = None
2018

2119
from . import base_events
2220
from . import constants
@@ -28,6 +26,10 @@
2826
from . import trsock
2927
from .log import logger
3028

29+
HAVE_SENDMSG = hasattr(socket.socket, 'sendmsg')
30+
31+
if HAVE_SENDMSG:
32+
SC_IOV_MAX = os.sysconf('SC_IOV_MAX')
3133

3234
def _test_selector_event(selector, fd, event):
3335
# Test if the selector is monitoring 'event' events
@@ -899,7 +901,7 @@ def __init__(self, loop, sock, protocol, waiter=None,
899901
self._eof = False
900902
self._paused = False
901903
self._empty_waiter = None
902-
if hasattr(socket.socket, 'sendmsg'):
904+
if HAVE_SENDMSG:
903905
self._write_ready = self._write_sendmsg
904906
else:
905907
self._write_ready = self._write_send
@@ -1070,12 +1072,15 @@ def write(self, data):
10701072
self._buffer.append(data)
10711073
self._maybe_pause_protocol()
10721074

1075+
def _get_sendmsg_buffer(self):
1076+
return itertools.islice(self._buffer, SC_IOV_MAX)
1077+
10731078
def _write_sendmsg(self):
10741079
assert self._buffer, 'Data should not be empty'
10751080
if self._conn_lost:
10761081
return
10771082
try:
1078-
n = self._sock.sendmsg(self._buffer)
1083+
n = self._sock.sendmsg(self._get_sendmsg_buffer())
10791084
self._adjust_leftover_buffer(n)
10801085
except (BlockingIOError, InterruptedError):
10811086
pass

0 commit comments

Comments
 (0)