aliyun / iotkit-embedded

高速镜像: https://code.aliyun.com/linkkit/c-sdk
Apache License 2.0
496 stars 252 forks source link

在CoAPMessage_process里面,可能导致线程没办法退出 #152

Closed bzd2132 closed 2 years ago

bzd2132 commented 4 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

这个时候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,可以提供参考。 coap_process_block