WinSocket发送视频数据发生WSAEWOULDBLOCK

在提升视频码率至4096kbps并进行千兆网络传输时,遇到WinSocket发送视频数据速度下降至2MB/s,导致内存上涨。问题源于WSAEWOULDBLOCK错误频繁发生。通过增大socket发送缓冲区大小至160K,成功优化至8MB/s,减少了WSAEWOULDBLOCK错误,解决了内存上涨问题。调整Client端的接收缓冲区大小同样重要,以保持接收效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:

程序使用winsocket TCP协议发送视频数据,一帧帧发送,之前测试一直没有问题。直到最近产品计划提升性能,将视频码率提升至4096kbps,本地32路远程16路同时获取,计算一下,网络需要8MB/s的速度。8MB/s = 64Mb/s, 那么一般的百兆网卡和网管肯定是不行了,需要搭建千兆传输网络。我们的网络环境为千兆网,网速实测到50-60MB/s。另外client接收到数据后直接返回,因此接收端不影响速度。

 

测试场景1:Server和Client本机测试。

通过性能监视器显示Server的确发送速度为8MB/s,内存稳定,符合预期。

 

测试场景2:Server和Client部署在网络中两台机器上。

通过性能监视器显示Server端发送速度为2MB/s,不符合预期,且由于发送速度过低造成了缓存增大进而引起内存上涨。

 

为什么本机和千兆网里的表现差别这么大呢?

排查与修改过程:

  1. 经过检查,发现发送逻辑在判断发生WSAEWOULDBLOCK(缓冲区溢出)错误后,数据保存然后返回,等到FD_WRITE事件再次触发,再次发送数据。这个处理过程本身并没有什么问题,问题是如果WSAEWOULDBLOCK发生次数过多就会引起发送效率降低,因此通过打log跟踪,发现的确
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值