微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200省电需求下的网络异常处理问题

CC3200省电需求下的网络异常处理问题

时间:10-02 整理:3721RD 点击:

请教一下TI的工程师:

目前我做的一个项目,需要做省电,所以TCP和UDP的接收都做的是阻塞接收,不做超时接收。这样的话,TCP和UDP接收任务里,都会一直占用着对应的socket。

在这样的情况下,如果网络异常了,比如路由断电(人为模拟,断电后几秒钟又上电),程序会接收到异常事件。这个时候,之前建立的TCP和UDP连接,就已经没用了,需要关掉socket,并且重新尝试连接路由,连接上以后再重新建立TCP和UDP连接。

这个时候问题就来了,因为TCP和UDP任务都处于阻塞接收状态当中,socket正在被占用。在别的地方关掉socket,就会关闭失败(调用sl_Close函数,返回的结果为-8,即socket command in execution)。比如UDP,socket关闭失败,之前的端口被占用着,再重新bind,就会出错。而TCP,因为关闭socket失败,再重新建立socket,会导致建立socket返回的id一直往上增加(比如第一次建立时的id是81,第二次建立就会变成82等,UDP的结果也一样)。

请问一下,在省电需求下,该怎么处理这样的网络异常情况呢,谢谢!

PS:不做省电的话,我的思路是超时接收或者非阻塞接收,这样肯定会退出接收函数,如果有网络异常,就设置一些标志位。TCP和UDP超时退出接收以后,判断标志位有效,然后把socket关掉。。。。。。问题是,需要做省电~~

1、路由器断电后,cc3200会收到异常冲断

2、tcp阻塞情况下五分钟后recv也会返回异常值,这个时候就可以关掉socket了

鉴于这两种情况,看着办吧。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top