libuv服务端发送数据不全问题排查

最近在使用libuv作为服务端时,在某些环境下出现了发送数据不全的问题,例如单次发送50K数据,实际只能接收到45K,而且后续所有数据都无法被接收到。查了很久,后来发现在客户端主动发送一条数据,这样能触发libuv的剩余发送。

应用:

libuv做服务端,客户端连接后,当服务端有某些事件后向客户端推送一些数据。

现象:

单帧50K数据,无法收到结果,并且发现只有第一次发送会有部分数据,但数据不全。在相同环境中必现且现象一致。

在某些环境下出现,出现这种情况下接了无线路由和USB无线网卡。

排查:

经抓包和代码调试,发现服务端第一次发送的数据与实际接收到的数据是一致的,并且通过抓包确认后续数据都没有发送。

这与 uv__try_write 第一次发送后返回的 n 对应一致。

随后将更新剩余数据,剩余数据长度与未发送数据长度一致。

 接下来调用uv_io_start,试图将写事件加入到epoll里。

再接下来继续发送数据时在 uv_write2 中由于

条件不满足进入到else发送,这与代码原注释也相吻合,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值