成功移植lwip1.3.1 1.3.2 1.4.1,裸机能跑tcp客户端和服务器。
开心之余,又有些问题需要请教了,lwip里面如何处理断线重连的问题?
下面是我实验的现象:
我在裸机上使用lwip,tcp做了服务器和客户端,在连接后把网线拔掉,tcp_poll函数还是会被执行的,这时候把网线插上(还没出现abort错误),需要重新连接(端口没变,原连接已经没反应了),连接后上一次连接的pcb仍然存在,这时候会发现轮询时候有两个pcb连接在运行。等了好几分钟后(关闭了保活设置)第一个pcb连接出现连接错误,自动断开。。。
这两个pcb占用同一个端口不会产生冲突吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
uIP移植起来也比较简单,过会也把移植的uIP1.0上传吧
有同学说可以把lwip的ping的速度提升到小于1ms,裁剪了很多不使用的内容,但他不太愿意公开他的方法。。。。
添加了sys_now()这个函数后,LwIP1.4.1可以跑起来了。可以ping通。
但是,在测试中遇到了这样一个问题:(图片中发了1000字节,只回发了512字节)
tcp_write()了之后,数据发了一遍后,就发不出去了。
多次测试发现,当建立一个新的连接后,板子把接收到的数据回发,
只能回发1个TCP_MSS(设置的是512)的数据,之后就发不了。
串口调试:在慢启动tcp_slowtmr()里不断重发未发出数据,但PC这边
没有收到,重发次数超限后,出现:
tcp_slowtmr: max DATA retries reached //超出数据重发次数
tcp_pcb_purge //清除tcp_pcb
tcp_pcb_purge: not all data sent
tcp_pcb_purge: data left on ->unacked
tcp_slowtmr: no active pcbs
tcp_slowtmr: no active pcbs
tcp_slowtmr: no active pcbs
用wireshark抓包也有这个现象。
楼主有遇到过这种情况吗?使用1.4.1有没有遇到问题啊?裸系统的。
一周热门 更多>