2013-02-10 64 views
0

我试图绑定WSGIServer到IPv6的环回地址:与GEVENT WSGIServer使用IPv6套接字

import socket 
import gevent 
from gevent.pywsgi import WSGIServer 

addrs = socket.getaddrinfo('::1', 8000, socket.AF_INET6, 0, socket.SOL_TCP) 
bind_spec = addrs[0][-1] 

listener = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) 
listener.bind(bind_spec) 

server = WSGIServer(
    listener, 
    lambda a,b:'asd' 
) 

server.serve_forever() 

但这仅产生

error: [Errno 22] Invalid argument 

File "/usr/local/lib/python2.7/dist-packages/gevent/server.py", line 122, in _do_accept 
    client_socket, address = self.socket.accept() 

我我试图用gevent monkeypatcher,但没有帮助。导入gevent AFTER套接字创建也没有帮助。

IPv6已在我的系统上启用。如果我用纯accept()替换服务器构造,套接字将成功绑定并接受连接。

listener.listen(5) 
listener.accept() 

回答

0

我这么笨...... GEVENT不提供的套接字上调用listen(),所以我不得不创建服务器之前调用它自己。