【问题标题】:Using IPv6 socket with GEvent WSGIServer将 IPv6 套接字与 GEvent WSGIServer 一起使用
【发布时间】:2013-02-10 18:32:14
【问题描述】:

我正在尝试将 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()

【问题讨论】:

    标签: python ipv6 gevent


    【解决方案1】:

    我太傻了... GEvent 不会在提供的套接字上调用listen(),所以我必须在创建服务器之前自己调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2011-05-03
      • 2014-02-01
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多