zmq 多路复用poll无法收包的问题(朴素的比对法解决问题)

项目中使用ZMQ 4.1.2版本时,遇到多路复用poll无法接收消息的问题。在不同环境和条件下,问题表现不一。通过对比调试、抓包分析和GDB单步调试,发现发送端存在getsockopt返回EAGAIN错误。最终,通过比对正常DEMO代码与项目代码,发现编译选项-I导致头文件版本冲突,从而找出问题根源。解决方案是确保所有编译选项和依赖一致,特别是ZMQ库的版本和头文件路径。
摘要由CSDN通过智能技术生成

     最近项目中使用ZMQ相关的库作为通讯组件,前期用得还算是比较顺利,API使用很简单而且易上手。用了是稳定的4.1.2版本C++版本。

     近期忽然发现,一个服务,使用多路复用zmq::poll无法收到包。问题表现:

     1)自己的机器上能正常使用poll收到包,没有问题。(自己的机器使用docker镜像环境在跑,代码在git上拉下来)

     2)同事的机器上的相同的代码下,无法收到poll包。(同事的机器,直接跑)

     比对之后,怀疑是使用ZMQ版本问题,于是在同事机器上也搭好了docker环境,再试,还是一样的结果。

     于是开始进行排查问题。

     排查过程(一系列莫名其妙的问题)

     A)进行抓包分析,发现ZMQ的发送端没有把数据包发出来,奇怪的是,改了接收端逻辑,不使用多路复用,使用阻塞式收包方式,居然能收到包。

     疑问:包发不出来,应该跟发送相关,跟接收是啥关系?

     B)GDB单步调试,发送的时候,发送端的状态总是返回非法,在最深处,发现是在一个getsockopt中返回一个EAGAIN错误。一脸茫然。

     C)加了monitor到里面去查看连接状态,只看到状态不正确,但定位不到具体原因。

     D)另外,再在出问题的机器上,使用之前写好的单独进程的DEMO代码进行测试,看能否使用IO

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值