gpt4 book ai didi

python - ARM 上的 Tornado socket.error

转载 作者:太空狗 更新时间:2023-10-30 02:21:27 25 4
gpt4 key购买 nike

我正在尝试使用 Tornado 服务器在 RasPi 上运行一个小型 python webapp,但是每当我尝试启动它时,我都会收到错误

Traceback (most recent call last):
File "main.py", line 78, in <module>
application.listen(8080)
File "/usr/local/lib/python2.7/dist-packages/tornado-3.0.1-py2.7.egg/tornado/web.py", line 1343, in listen
server.listen(port, address)
File "/usr/local/lib/python2.7/dist-packages/tornado-3.0.1-py2.7.egg/tornado/tcpserver.py", line 113, in listen
sockets = bind_sockets(port, address=address)
File "/usr/local/lib/python2.7/dist-packages/tornado-3.0.1-py2.7.egg/tornado/netutil.py", line 69, in bind_sockets
sock = socket.socket(af, socktype, proto)
File "/usr/lib/python2.7/socket.py", line 187, in __init__
_sock = _realsocket(family, type, proto)
socket.error: [Errno 97] Address family not supported by protocol

我有理由相信我做的一切都是正确的

  • 我尝试监听的端口未被使用
  • 我没有指定地址,但自从 Tornado "hello world" 以来我似乎不需要指定地址也没有(该演示应用程序本身也没有运行;它给出了完全相同的错误,但行号不同)
  • 同一个应用似乎在 x86 和 x86_64 机器上运行良好

我是否需要在 ARM 上进行不同的调用,或者这是 tornado/socket.py 中某处的错误?有可用的解决方法吗?

因为它似乎是相关的,Pi 正在运行来自 this page 的最新 Raspbian 图像(几天前从第二个镜像下载的,所以不再是最新的)。我目前正在试用旧版本,如果不起作用,我会尝试最新版本。

最佳答案

事实证明这与ARM无关。根据 the answer 朴实无华的噪音在他的一条评论中有链接,看起来如果您启动它的系统支持 IPv6,Tornado 就会感到困惑,这显然包括 Raspberry Pi。

启动服务器

application.listen(8080, '0.0.0.0')

不仅仅是

application.listen(8080)

为我解决了这个问题。

EDIT2:对于跨平台开发人员:我之前概述的策略实际上不起作用。调用 application.listen 绑定(bind)指定的端口,即使调用错误(这似乎是 Tornado 中的一个错误)。换句话说,您需要确定在调用 listen 之前要做什么。

因为我在 GNU/Debian 上运行我的应用程序,以下对我来说已经足够好了:

def listen(port):
(osName, machineName, osRelease, osVersion, machineType) = os.uname()
if re.search("arm", machineType):
logging.info("Running on ARM...")
application.listen(port, '0.0.0.0')
else:
logging.info("Running on x86...")
application.listen(port)

不知道这个解决方案在其他操作系统或架构下有多可靠。

关于python - ARM 上的 Tornado socket.error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16153804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com