0

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 をインポートしても役に立ちませんでした。

システムで IPv6 が有効になっています。サーバーの構造をプレーンな accept() に置き換えると、ソケットが正常にバインドされ、接続が受け入れられます。

listener.listen(5)
listener.accept()
4

1 に答える 1

0

私はとても愚かです... GEvent はlisten()提供されたソケットで呼び出されないため、サーバーを作成する前に自分で呼び出す必要がありました。

于 2013-02-12T10:19:17.523 に答える