Commit bff1a14a authored by Jim Fulton's avatar Jim Fulton Committed by GitHub

Merge pull request #37 from zopefoundation/TCP_NODELAY

TCP_NODELAY
parents 1eb086da a0fa2fe7
from struct import unpack from struct import unpack
import asyncio import asyncio
import logging import logging
import socket
import sys
from .marshal import encoder from .marshal import encoder
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
INET_FAMILIES = socket.AF_INET, socket.AF_INET6
class Protocol(asyncio.Protocol): class Protocol(asyncio.Protocol):
"""asyncio low-level ZEO base interface """asyncio low-level ZEO base interface
""" """
...@@ -41,7 +45,15 @@ class Protocol(asyncio.Protocol): ...@@ -41,7 +45,15 @@ class Protocol(asyncio.Protocol):
def connection_made(self, transport): def connection_made(self, transport):
logger.info("Connected %s", self) logger.info("Connected %s", self)
if sys.version_info < (3, 6):
sock = transport.get_extra_info('socket')
if sock is not None and sock.family in INET_FAMILIES:
# See https://bugs.python.org/issue27456 :(
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)
self.transport = transport self.transport = transport
paused = self.paused paused = self.paused
output = self.output output = self.output
append = output.append append = output.append
......
...@@ -86,7 +86,7 @@ class Transport: ...@@ -86,7 +86,7 @@ class Transport:
capacity = 1 << 64 capacity = 1 << 64
paused = False paused = False
extra = dict(peername='1.2.3.4', sockname=('127.0.0.1', 4200)) extra = dict(peername='1.2.3.4', sockname=('127.0.0.1', 4200), socket=None)
def __init__(self, protocol): def __init__(self, protocol):
self.data = [] self.data = []
......
...@@ -324,8 +324,8 @@ class InvalidationTests: ...@@ -324,8 +324,8 @@ class InvalidationTests:
def checkConcurrentUpdates2Storages_emulated(self): def checkConcurrentUpdates2Storages_emulated(self):
self._storage = storage1 = self.openClientStorage() self._storage = storage1 = self.openClientStorage()
storage2 = self.openClientStorage()
db1 = DB(storage1) db1 = DB(storage1)
storage2 = self.openClientStorage()
db2 = DB(storage2) db2 = DB(storage2)
cn = db1.open() cn = db1.open()
...@@ -349,8 +349,8 @@ class InvalidationTests: ...@@ -349,8 +349,8 @@ class InvalidationTests:
def checkConcurrentUpdates2Storages(self): def checkConcurrentUpdates2Storages(self):
self._storage = storage1 = self.openClientStorage() self._storage = storage1 = self.openClientStorage()
storage2 = self.openClientStorage()
db1 = DB(storage1) db1 = DB(storage1)
storage2 = self.openClientStorage()
db2 = DB(storage2) db2 = DB(storage2)
stop = threading.Event() stop = threading.Event()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment