LWIP 使用tcp_write()和tcp_output不能高频率向外发送数据?

2019-12-20 21:36发布

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

应该不是需要将缓存写到一定数量再发送,感觉就是周期性的发送,会不会是轮训或者其他周期性的执行,对LWIP的内核不是很理解,因此请教各位大神,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
落叶知秋
1楼-- · 2019-12-21 02:49
Nagle算法的宏开关关掉了没有?
落叶知秋
2楼-- · 2019-12-21 07:26
本帖最后由 落叶知秋 于 2018-3-29 15:06 编辑
hswkcg 发表于 2018-3-29 14:01
正解!我把tcp_output中关于nagle的判断屏蔽掉就解决了。

但是,还有点不清楚的地方请教您一下,如果我 ...


nagle处理对应每个连接的tpcb,关闭也对应每个连接tpcb

你可以在初始化tpcb的时候选择是否把TCP_NODELAY的标志清掉,自己写个函数,或者直接在初始化流程里处理

还有,不要以屏蔽代码的方式来解决这个问题
主楼一区401
3楼-- · 2019-12-21 09:44
 精彩回答 2  元偷偷看……
dwj0
4楼-- · 2019-12-21 14:02
当tcp_output中的pcb是当前pcb时,lwip只是把数据先缓存起来,等函数返回后再发送
hswkcg
5楼-- · 2019-12-21 18:50
落叶知秋 发表于 2018-3-29 11:30
Nagle算法的宏开关关掉了没有?

正解!我把tcp_output中关于nagle的判断屏蔽掉就解决了。

但是,还有点不清楚的地方请教您一下,如果我关闭nagle是所有的连接都关闭了吗?还是窝关闭哪个连接的时候就把该链接的 tpcb->flags & TF_NODELAY   就可以?nagle关闭的正确方式是什么呢?
hswkcg
6楼-- · 2019-12-21 23:22
结贴,见6楼。

一周热门 更多>