关于TCP链接重连过程

是这样,我用CH32V208做了一个BLE网关。

为了保持网络连接稳定,以及在网关的参数变动的时候网关会自动修改。

我设计了如下过程:


1、开启DHCP。

2、DHCP完成后执行DNS解析,获取服务器IP

3、创建TCP连接,进行MQTT通信。

4、判断WCHNET_SocketSend函数返回与发送数据的长度是否一致,不一致重发,发送次数达到限制后触发重连。

5、为了防止冲突,重连前完成:WCHNET_DHCPStop、WCHNET_DNSStop、WCHNET_SocketClose( TCP_CLOSE_ABANDON 模式 )

6、重复到步骤1


并且,WCHNET_HandleSockInt中:

检测到SINT_STAT_TIM_OUT,我会执行一遍WCHNET_SocketClose后执行WCHNET_SocketCreat和WCHNET_SocketConnect。


检测到SINT_STAT_DISCONNECT后执行WCHNET_SocketClose



目前遇到的问题是:

重连时 ( 此时已经确认执行过 WCHNET_DHCPStop、WCHNET_DNSStop、WCHNET_SocketClose )

DHCP能完成重新获取IP

DNS 时提示0x1E  ( Operation in progress )              

WCHNET_SocketCreat         时提示0x1D    ( Already connected )

WCHNET_SocketConnect    时提示0x17     ( Connection closed )


是不是我执行过程有问题?

您好,需要注意Transport_Open()会创建socket并建立连接,您可以看一下您手动创建与建立连接的操作是否与该函数的操作重复,如果是其他原因导致可通过微信沟通解决。wechat:19951759326image.png


只有登录才能回复,可以选择微信账号登录