2013-02-10 2 views
0

Я пытаюсь связать WSGIServer с петлевой адрес IPv6:Использование IPv6 сокет с GEvent WSGIServer

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 socket тоже не помог.

IPv6 включен в моей системе. Если я заменил конструкцию сервера на plain accept(), сокет успешно связывается и принимает соединения.

listener.listen(5) 
listener.accept() 

ответ

0

Я так глуп ... GEvent не вызывает listen() на поставленном гнездо, так что я должен был назвать себя перед созданием сервера.