Boost库listener::on_accept在do_accept执行结束后未触发问题排查求助
Boost.Beast async_accept 回调未触发排查思路
- 优先检查
listener构造函数中acceptor的初始化流程是否完整,必须按顺序执行open、bind、listen三个核心操作,且每一步都要捕获错误码判断是否执行成功。任意一步失败(比如端口被占用、IP地址非法)都会导致async_accept实际没有在监听连接,自然不会触发回调。 - 确认
LOCAL_IP和SERVER_PORT_NUMBER配置合法:LOCAL_IP必须是本机已存在的网卡地址,如果要监听所有网卡可以直接用0.0.0.0;SERVER_PORT_NUMBER不能是被系统占用、被防火墙拦截的端口,可先通过netstat命令查看对应端口是否处于监听状态。 - 确认你已经主动向监听端口发起了TCP连接:
async_accept是异步等待连接的操作,只有当有客户端(比如浏览器、websocket测试工具、telnet)主动连接对应地址端口时,on_accept回调才会被触发,程序启动后无外部连接的情况下不会自动触发该回调。 - 检查
io_context运行状态:你代码中配置的线程数为1,额外工作线程不会启动,只有主线程执行ioc.run(),确认执行ioc.run()之后没有逻辑提前终止该函数运行。 - 可在
async_accept调用前输出acceptor.is_open()的返回值,确认acceptor处于正常打开状态,若返回false说明初始化阶段已经出现问题。
内容的提问来源于stack exchange,提问作者Taki
相关产品推荐
相关产品推荐

