天线|RF射频
直播中

史乃原

7年用户 189经验值
私信 关注
[问答]

请问LWIP使用tcp_write()和tcp_output向外发送数据时不是立即发送吗?

协议栈移植的LWIP 1.4.1 ,TCP Client。在使用过程中发现,不管在应用程序里面以多大的频率来调用tcp_write() 和 tcp_output来实现数据的发送,接收到的数据总是将几帧数据打包在一起发送出来,发送的频率还比较稳定为200ms左右。tcp_write是将数据写入缓存,tcp_output不就将数据直接发送出来了吗?为什么会出现几帧打包在一起再发送的情况呢?请教各位路过的大神,这个是什么原因呢?

回帖(4)

彭小海

2020-3-26 09:28:21
这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包再往外发送,Nagle算法的周期一般是200ms,我尝试把这个算法关闭后,抓包工具抓到的数据看就正常了。。。。 结贴。。。。。
举报

李斌

2020-3-26 09:48:04
缓冲数据达到发送数量才发送出去
举报

李欣

2020-3-26 09:57:06
应该和发送数量无关。我测试了一下,10hz发送时,会打包两帧200个字节再发送,20hz时,则会打包4帧400字节左右再发送。从现象看,好像就是一个比较固定的时间再发送,猜测会不会和轮训等比较有周期性的进程有关?
举报

徐丽丽

2020-3-26 10:14:32
你好,楼主。这个问题具体怎么解决掉的,能不能回复下
举报

更多回帖

发帖
×
20
完善资料,
赚取积分