mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Content server: Fix dual stack sockets not working on Windows
This commit is contained in:
parent
b00246070e
commit
5eafba6889
@ -28,6 +28,7 @@ from calibre.utils.mdns import get_external_ip
|
||||
|
||||
READ, WRITE, RDWR, WAIT = 'READ', 'WRITE', 'RDWR', 'WAIT'
|
||||
WAKEUP, JOB_DONE = bytes(bytearray(xrange(2)))
|
||||
IPPROTO_IPV6 = getattr(socket, "IPPROTO_IPV6", 41)
|
||||
|
||||
|
||||
class ReadBuffer(object): # {{{
|
||||
@ -485,8 +486,7 @@ class ServerLoop(object):
|
||||
if (hasattr(socket, 'AF_INET6') and self.socket.family == socket.AF_INET6 and
|
||||
self.bind_address[0] in ('::', '::0', '::0.0.0.0')):
|
||||
try:
|
||||
self.socket.setsockopt(
|
||||
socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
|
||||
self.socket.setsockopt(IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
|
||||
except (AttributeError, socket.error):
|
||||
# Apparently, the socket option is not available in
|
||||
# this machine's TCP stack
|
||||
|
@ -127,15 +127,18 @@ class LoopTest(BaseTest):
|
||||
self.assertTrue(b.stopped.wait(5), 'BonJour not stopped')
|
||||
|
||||
def test_dual_stack(self):
|
||||
from calibre.srv.loop import IPPROTO_IPV6
|
||||
with TestServer(lambda data:(data.path[0] + data.read()), listen_on='::') as server:
|
||||
self.ae(server.address[0], '::')
|
||||
self.ae(server.loop.socket.getsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY), 0)
|
||||
self.ae(server.loop.socket.getsockopt(IPPROTO_IPV6, socket.IPV6_V6ONLY), 0)
|
||||
for interface in ('::1', '127.0.0.1'):
|
||||
conn = server.connect(interface=interface)
|
||||
conn.request('GET', '/test', 'body')
|
||||
r = conn.getresponse()
|
||||
self.ae(r.status, httplib.OK)
|
||||
self.ae(r.read(), b'testbody')
|
||||
r.close()
|
||||
conn.close()
|
||||
|
||||
def test_ring_buffer(self):
|
||||
'Test the ring buffer used for reads'
|
||||
|
Loading…
x
Reference in New Issue
Block a user