You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在函数内运行eventlet/socketio服务会报错?如何解决?

问题原因

你封装后的代码里eventlet.listen的传参写错了:

  • 正常运行的代码中,eventlet.listen接收的第一个参数是二元组('', port),代表绑定所有网卡的指定端口
  • 封装后的代码漏了外层括号,把('', port)拆成了两个单独的参数传给listen,第一个参数是字符串'',第二个参数port被错误识别为地址族参数,5000不属于合法的地址族取值,因此触发地址家族不支持的报错。

解决方法

把run函数里的eventlet.listen('', port)改成eventlet.listen(('', port))即可,修正后的完整代码如下:

import socketio
import eventlet

port = 5000
sio = socketio.Server()
app = socketio.WSGIApp(sio, static_files={})

@sio.event
def connect(sid, environ):
    print('Connect')

def run():
    # 修正listen的参数,加上外层括号组成二元组
    eventlet.wsgi.server(eventlet.listen(('', port)), app)

run()

如果需要写到类方法里,写法完全一致,只要保证listen的第一个参数是(绑定地址, 端口)的二元组即可。

内容的提问来源于stack exchange,提问作者ThatCoolCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:54:03