Table of Contents
由于项目要求需要使用uC/TCP-IP做一个TCP Client端连接服务器。
出现了以下问题,烧写完程序后可以连接服务器,但是MCU复位后执行到NetSock_Conn会返回超时。
交叉编译了tcpdump,查看网络信息后发现出现超时的时候3次握手不完整。
使用netstat -a发现握手截至在FIN_WAIT1。当系统终止掉这次握手或者复位后,MCU总是可以连接到服务器,但是重连总是失败,错误码为超时。
google了基本没有人提到这个错误。初步结论可能是配置有误。但是增加了任务堆栈、调整任务优先级也没有效果。
之前有做过RM9200,于是打开代码发现都是使用的Server端。没有Client端。没办法,分别找了我们使用的MCU和RM9200的官方代码。终于在RM9200的code里面的Conn之前发现这样一条命令:
1 2 3 |
NetSock_CfgTimeoutConnReqSet(TTCP_ConnSockID[i], TTCP_CFG_MAX_CONN_TIMEOUT_MS, &TTCP_Err); |
看名字就知道是设置连接超时,grep TTCP_CFG_MAX_CONN_TIMEOUT_MS发现为30000。依葫芦画瓢,问题解决。
原因就是系统默认的超时时间太短造成的。