Closed bzd2132 closed 2 years ago
因为在CoAPMessage_process里面ip_addr的默认值是0,
char ip_addr[17] = {0}; CoAPIntContext *ctx = (CoAPIntContext *)context;
而remote的初始化值也是0 memset(&remote, 0x00, sizeof(NetworkAddr)); 会出现一种情况,当网络出现问题后,程序进入CoAPMessage_process后,获得的ip_addr是不成功的,所以ip_addr为默认值。 HAL_Wifi_Get_IP(ip_addr, NULL); //不成功返回ip_addr为0
memset(&remote, 0x00, sizeof(NetworkAddr));
HAL_Wifi_Get_IP(ip_addr, NULL); //不成功返回ip_addr为0
这个时候CoAPMessage_process就没办法退出,当UDP没有收到数据的情况下,都会因为下面的判断从新循环一次。
if (strncmp((const char *)ip_addr, (const char *)remote.addr, sizeof(ip_addr)) == 0) /* drop the packet from itself*/ continue;
我做了一些修改,将remote的默认值改为0xFF,可以提供参考。
因为在CoAPMessage_process里面ip_addr的默认值是0,
而remote的初始化值也是0
memset(&remote, 0x00, sizeof(NetworkAddr));
会出现一种情况,当网络出现问题后,程序进入CoAPMessage_process后,获得的ip_addr是不成功的,所以ip_addr为默认值。HAL_Wifi_Get_IP(ip_addr, NULL); //不成功返回ip_addr为0
这个时候CoAPMessage_process就没办法退出,当UDP没有收到数据的情况下,都会因为下面的判断从新循环一次。
我做了一些修改,将remote的默认值改为0xFF,可以提供参考。