调试lwip tcp udp的一些问题

操作系统:ecos, lwip 版本:1.1.1(ecos\packages\net\lwip_tcpip\v3_0\ChangeLog

以TCP为例:

1. open命令操作包括:netconn_new()\netconn_bind(),创建task,在其中netconn_connect(),然后循环中netconn_recv();

2. close 命令:netconn_delete(),删除open时的task,清除相关保存con的信息。

3. read命令,write命令。

问题主要在open和close。由于lwip对多任务支持不好,1.1.1版本的netconn_recv()一直阻塞在那里,碰到一些问题。

a. 当反复open, close时,一段时间后(测试open第64次时出错),netconn_recv(),但buf为null,conn->err不为OK,出现了tcp conn is error,error为-1。查看lwip代码,-1为ERR_MEM:out of memory error。出现该问题后,无法恢复,open一直是这个错误。lwip netconn_recv()代码中会memp_malloc(),这里个数为64个,所以open 64次后调memp_malloc()失败。

为了能够恢复,在出错时调用memp_inint(),测试可以恢复。

b. 当open命令后紧接着close,会出现无法响应命令。发现只要close发生在open中的netconn_recv之前,就会出现。原因是close后再netconn_recv(),这时阻塞住了。---lwip用于多任务时需注意。为了规避,在open时,等到netconn_recv()时再返回结果,要求只有等open返回结果才能调用close命令。这种情况测试udp时没有出现,原因netconn_connect()在tcp中建立连接会占用一定时间,不是立刻返回,可能导致close发生在netconn_recv之前。

c. tcp在建立连接时,对端不存在,需等一段时间才能返回错误。tcp需建立连接。

    udp这种情况立即返回ok。不需建立连接。虽然都调用了netconn_connect()。

下了lwip 1.3.2版本,支持netconn_recv()超时退出,修复了一些bug,后续有时间改为该版本调试。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值