OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4488|回复: 1

关于LWIP断开网线后重连问题(热插拔问题)

[复制链接]

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-9-14
在线时间
16 小时
发表于 2021-11-18 17:01:09 | 显示全部楼层 |阅读模式
最近在弄STM32+LWIP协议,在网络拔掉网线情况下,无法重新连接。网上找了好多方法都没有实现,着实郁闷!后来无意间看到了暂时解决这一问题的方法,虽然不是那么完美,但最算能解决问题。分享给大家。问题:LWIP建立一个TCP服务器,收发数据也正常。但是客户端非正常断线-如客户端掉电,突然拔掉客户端的网线,然后重新连接服务器,就连接不上了。

原因:LWIP_CLOSE(),在非正常断线情况下使用不知道有什么还占着内存释放不了,没法正常释放资源。

解决方法:
在服务器端检测到网线热插拔后,强制清空TCP_BUF。 当前存在另一个问题是,服务器允许最多接入4个客户端,实际只能接入2个,待定位
for(;;)
{
        pcb = tcp_active_pcbs;
        tcp_active_pcbs = tcp_active_pcbs->next;
        tcp_abort( pcb );
                                       
        if(tcp_active_pcbs == NULL)
        {
                break;
        }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-9-14
在线时间
16 小时
 楼主| 发表于 2021-11-19 15:41:29 | 显示全部楼层
通过修改os_cfg.h里面的信号量的个数,当前已经允许7个客户端与服务器同时通信
#define OS_MAX_EVENTS            20u   /*系统最大事件数 Max. number of event control blocks in your application      */
#define OS_MAX_FLAGS              10u   /*系统最大的信号量集数Max. number of Event Flag Groups    in your application      */
#define OS_MAX_MEM_PART           10u   /*内存块数目 Max. number of memory partitions                             */
#define OS_MAX_QS                 10u   /* Max. number of queue control blocks in your application      */
#define OS_MAX_TASKS             20u   /* Max. number of tasks in your application, MUST be >= 2       */
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表