是这样,我用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 )
是不是我执行过程有问题?