RT-Thread-packages / umqtt

A light weight, powerful, customizable, easy-to-use and embeddable mqtt client for RT-Thread
Apache License 2.0
27 stars 10 forks source link

Socket连接失败 #9

Open DriftSnail opened 4 years ago

DriftSnail commented 4 years ago

https://github.com/RT-Thread-packages/umqtt/blob/6609efdab702a2339dbcb9339b27b68b47336b43/src/trans/umqtt_transport.c#L191-L213

非TLS加密时应该无需执行ioctlsocket,修改建议如下:

    if ((*sock = socket(addr_res->ai_family, SOCK_STREAM, UMQTT_SOCKET_PROTOCOL)) < 0) 
    {
        LOG_E("create socket error!");
        _ret = UMQTT_FAILED;
        goto exit;
    }

   if(UMQTT_SOCKET_PROTOCOL)  //非加密时无需执行此步骤
   {
         _ret = ioctlsocket(*sock, FIONBIO, 0);
         if (_ret < 0) 
         {
               LOG_E(" iocontrol socket error!");
               _ret = UMQTT_FAILED;
               goto exit;
         }
   }

    if ((_ret = connect(*sock, addr_res->ai_addr, addr_res->ai_addrlen)) < 0) 
    {
        LOG_E(" connect err!");
        closesocket(*sock);
        *sock = -1;
        _ret = UMQTT_FAILED;
        goto exit;
    }