Commit 745c1b15 authored by Jim Fulton's avatar Jim Fulton

Use newer asyncio to connect accepted sockets (if available).

The new api will be in Python 3.6, and hopefullt, in uvloop soon.

When binding to port 0, make sure we set our address to a 2-tuple, because
IPV6 4-tuples confuse ClientStorage.
parent 3c525909
...@@ -51,6 +51,7 @@ else: ...@@ -51,6 +51,7 @@ else:
import asyncore import asyncore
import socket import socket
import threading import threading
import time
from .server import ServerProtocol from .server import ServerProtocol
...@@ -130,7 +131,7 @@ class Acceptor(asyncore.dispatcher): ...@@ -130,7 +131,7 @@ class Acceptor(asyncore.dispatcher):
break break
if isinstance(addr, tuple) and addr[1] == 0: if isinstance(addr, tuple) and addr[1] == 0:
self.addr = addr = self.socket.getsockname() self.addr = addr = self.socket.getsockname()[:2]
logger.info("listening on %s", str(addr)) logger.info("listening on %s", str(addr))
self.listen(5) self.listen(5)
...@@ -177,20 +178,24 @@ class Acceptor(asyncore.dispatcher): ...@@ -177,20 +178,24 @@ class Acceptor(asyncore.dispatcher):
if self.ssl_context is None: if self.ssl_context is None:
cr = loop.create_connection((lambda : protocol), sock=sock) cr = loop.create_connection((lambda : protocol), sock=sock)
else: else:
####################################################### if hasattr(loop, 'connect_accepted_socket'):
# XXX See http://bugs.python.org/issue27392 :( loop.connect_accepted_socket(
_make_ssl_transport = loop._make_ssl_transport (lambda : protocol), sock, ssl=self.ssl_context)
def make_ssl_transport(*a, **kw): else:
kw['server_side'] = True #######################################################
return _make_ssl_transport(*a, **kw) # XXX See http://bugs.python.org/issue27392 :(
loop._make_ssl_transport = make_ssl_transport _make_ssl_transport = loop._make_ssl_transport
# def make_ssl_transport(*a, **kw):
####################################################### kw['server_side'] = True
cr = loop.create_connection( return _make_ssl_transport(*a, **kw)
(lambda : protocol), sock=sock, loop._make_ssl_transport = make_ssl_transport
ssl=self.ssl_context, #
server_hostname='fu' # http://bugs.python.org/issue27391 #######################################################
) cr = loop.create_connection(
(lambda : protocol), sock=sock,
ssl=self.ssl_context,
server_hostname=''
)
asyncio.async(cr, loop=loop) asyncio.async(cr, loop=loop)
loop.run_forever() loop.run_forever()
......
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