EC20休眠时,TCP连接断开

您好,我正在使用EC20_R2.1通讯模组的休眠功能,在设备休眠前,我与服务器建立一个TCP连接,然后Linux主机进入休眠模式,EC20模块也进入休眠状态。在休眠状态不到10分钟,服务器端发送数据时显示连接已经断开,而设备并没有被唤醒,且EC20的网络灯为熄灭状态且没有变化。导致设备不能被远程唤醒。
尝试使用ppp拨号连接和QMI_WWAN连接,均出现该问题。
请问出现该问题的原因是什么,该如何进行定位。

你好
可以设置个保活看看看是否还会断开

已经在tcp客户端设置保活属性,仍然存在这个问题。

你是怎么设置的保活? 保活时间设置的多久 发出来看下


通过setsockopt进行设置

你好
看不出来你用的那调指令配置的保活,模块TCP保护可以通过AT+QCFG=“tcp/keepalive” 来配置

通过这条指令设置的保活:
setsockopt(m_sockid, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive));

我稍后也尝试一下通过AT指令设置,看是否能够解决问题。

可以发下内核的日志,看看唤醒后是否有usb Disconnect. 可能模组掉口重连了。

kern.log.txt (1020.3 KB)
syslog.txt (465.0 KB)

设备在13:59:51、14:06:28的时间点都出现过tcp连接断开的情况,

看内核日志并无问题。模块没有重新枚举。
可以检查下休眠唤醒前后拨号进程是否正常,网卡上的ip是否正常。

检查发现休眠过程中网络状态正常,我在服务端进行了抓包,发现tcp keep-alive只在前两次发送了,后面一直都没有发送探测包。


设置的tcp保活参数如下:

抱歉,我又重新核对了一下,发现之前图中的keep alive探测包是在休眠之前发送的,在系统进入休眠后,就再没有发送过keep alive探测包。

用Linux Socket,进入休眠模式后,这个Socket 代码所在的应用程序也进入frozen state了。不会去发包,也不能收包,就算远端服务器发过来了一个数据包,由于系统休眠,也搜不到。
如果长时间收不到,TCP确实会断开。
可以试下移远的TCP IP的AT指令。

我通过串口设置了AT+QCFG=“tcp/keepalive”,但是还是会出现这个问题。
请问具体应该如何设置,用哪条AT指令。另外,我在EC20 R2.1 AT Commands Manual文档中没有看到AT+QCFG=“tcp/keepalive”这个属性。


通过AT指令直接设置keepalive属性,ec20返回错误