TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

不知道是什么问题。

Yonghua Pan:

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

li weishi:

回复 Yonghua Pan:

打开的网页是空白的。

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

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

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

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

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

谢谢。

Yonghua Pan:

回复 li weishi:

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

li weishi:

回复 Yonghua Pan:

谢谢您的耐心解答。

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

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

Yonghua Pan:

回复 li weishi:

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

li weishi:

回复 Yonghua Pan:

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

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

谢谢。

li weishi:

回复 Yonghua Pan:

这是Sniffer抓包的截图。

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

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

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

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

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

Yonghua Pan:

回复 li weishi:

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

Michael1:

回复 Yonghua Pan:

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

赞(0)
未经允许不得转载:TI中文支持网 » CC3000会自己关闭长时间未进行通讯的socket吗?
分享到: 更多 (0)