微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3000会自己关闭长时间未进行通讯的socket吗?

CC3000会自己关闭长时间未进行通讯的socket吗?

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

我在CC3000上建立了一个socket(例如UDP),之后不进行通讯,大约50秒这个socket就无效了。无效的意思是当我在次建立一个socket时返回的句柄是上次那个无效的socket。

如果我改为在CC3000上建立一个TCP socket并且作为服务端,并调用accept,这时我在PC机的调试助手上建立客户端去连接CC3000上的服务端。之后不做通讯(不发送数据给CC300,0, 在CC3000我也没有发送数据给客户端),大约过了50多秒之后。PC机的调试助手就显示这个连接被断开了。 然后我重复上述在PC机建立连接的过程,并等待它显示断开连接(同样没有通讯)。当我第三次连接时就会返回第一次连接时返回的句柄。这就说明第一次建立的连接确实是无效了。

不知道是什么问题。

It's because socket inactivity timer expired. Please refer to: http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html.

打开的网页是空白的。

但是50秒是不是太短了呢。并且CC3000关闭时我并没有得到任何事件通知。可能过会还会在另外的地方使用了。

不只是TCP,UDP的socket也会失效。

*************************************************

但是PC机上建立的socket却没有这个问题啊。

另外想问下我遇到的这个问题其他人遇到了吗。或者说这只是一个正常的现象呢?

谢谢。

因为不像PC有很多的资源,像这种系统socket数目很有限。所以我们建议如果真是要长时间保持连接的话,最好是维护一个像心跳的功能,就是过段时间就发心跳包。

谢谢您的耐心解答。

也就是说我遇到的这个是正常现象了,是吗?

不过我这里有4块CC3000的模块,其中有一块是不会出现这种现象的。其他三块却有。

你4块CC3000用的firmware是一模一样的吗?你会不会用wireshark, 可以抓一下TCP/IP包看一下是不是有什么包导致了这种现象。

四块CC3000的固件版本都是一样的。读出来都是1.24。抓包我可以试试。

我想知道这是正常现象吗?麻烦您了。

谢谢。

是的,这是正常的。

这是Sniffer抓包的截图。

其中192.168.1.100是CC3000模块。另外一个是PC机。

我并没有主动去控制CC3000去关闭连接。

只是觉的这个50多秒的时间由点短。而且之前有一个模块是没有这个现象的。

还是说这个时间的长短可以由EEPROM的中的参数决定呢?

如果是正常现象的话,那也没办法了。暂时只能这样。

这个参数是不可改的,是固化的。如我之前建议的,可以在应用层里维护heartbeat功能保证它不断。

你好,我最近用刚买了CC3000也有这个问题,这个问题只能通过发送心跳包才能解决这个问题吗?是不是还能有其他的方法解决这个问题,是不是因为休眠产生的影响?谢谢!

不是因为休眠产生的影响,请参考http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html,这是为了保护有限的socket session不被一直占用。

我现在能想到的就是心跳包。这个需要从应用层来处理。

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

网站地图

Top