有人遇到过tcp的zerowindow问题么?跪求各位大神指点迷津~~ 200送上
事情是这样,我实现了个rtsp服务器.网络层使用了epoll模型.
在有些情况下,一些客户端连上来以后,会发生zerowindow的问题.
于是,我把发送策略改了一下. 情况有所好转.但不能彻底解决问题.
之前的发送方式是(方案A),数据包先进缓冲,一次投递过程结束后/缓冲满以后,再整体投递到网络上.
现在的发送方式是(方案B),数据包先投递,如果没有发送完全,则放到缓冲等待下次投递过程.
这两种方式产生的区别是.当一个视频帧被拆分成多个数据包投递时.方案A会把几个视频包一起投递.而方案B则尽可能的把数据包分别投递,但无法避免合并投递的问题.整个过程用wireshark分析后,并没有发现错误数据包.应该不存在数据处理逻辑的错误.
按理说,客户端发生zerowindow是因为客户端收数据不及时,或发送数据太多导致.当zerowindow后,发送端会等待接收端收取数据.
但是,当发生这个问题以后,客户端就再以不处理数据了,一直处于zerowindow状态.于是,服务器就一直死等.直到超时断开链接.
我在网上搜索,发现也有人遇到过这种问题,但最后解决了...不知道是如何解决的?似乎还有人说,出现zerowindow后,他select不到事件了...
怎奈,客户端是现成的...没法调试,更没法修改.
还有什么原因,会造成这种问题呢?
跪求各位大神指点迷津~~