Преглед на файлове

platformNetworkConnect 域名解析默认使用非线程安全函数已提高兼容性

ryancw преди 2 години
родител
ревизия
7c24810e17
променени са 1 файла, в които са добавени 36 реда и са изтрити 5 реда
  1. 36 5
      platform/rtthread/platformNetwork.c

+ 36 - 5
platform/rtthread/platformNetwork.c

@@ -20,11 +20,42 @@ RyanMqttError_e platformNetworkConnect(void *userData, platformNetwork_t *platfo
 {
     RyanMqttError_e result = RyanMqttSuccessError;
 
-    char buf[256];
-    int ret;
-    struct hostent hostinfo, *phost;
+    // ?线程安全版本,有些设备没有实现,默认不启用。如果涉及多个客户端解析域名请使用线程安全版本
+    // char buf[256];
+    // int ret;
+    // struct hostent hostinfo, *phost;
 
-    if (0 != gethostbyname_r(host, &hostinfo, buf, sizeof(buf), &phost, &ret))
+    // if (0 != gethostbyname_r(host, &hostinfo, buf, sizeof(buf), &phost, &ret))
+    // {
+    //     result = RyanSocketFailedError;
+    //     goto exit;
+    // }
+
+    // platformNetwork->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
+    // if (platformNetwork->socket < 0)
+    // {
+    //     result = RyanSocketFailedError;
+    //     goto exit;
+    // }
+
+    // struct sockaddr_in server_addr;
+    // memset(&server_addr, 0, sizeof(server_addr));
+    // server_addr.sin_family = AF_INET;
+    // server_addr.sin_port = htons(atoi(port)); // 指定端口号,这里使用HTTP默认端口80
+    // server_addr.sin_addr = *((struct in_addr *)hostinfo.h_addr_list[0]);
+
+    // // 绑定套接字到主机地址和端口号
+    // if (connect(platformNetwork->socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) != 0)
+    // {
+    //     platformNetworkClose(userData, platformNetwork);
+    //     result = RyanMqttSocketConnectFailError;
+    //     goto exit;
+    // }
+
+    // 非线程安全版本,请根据实际情况选择使用
+    struct hostent *hostinfo;
+    hostinfo = gethostbyname(host);
+    if (NULL == hostinfo)
     {
         result = RyanSocketFailedError;
         goto exit;
@@ -41,7 +72,7 @@ RyanMqttError_e platformNetworkConnect(void *userData, platformNetwork_t *platfo
     memset(&server_addr, 0, sizeof(server_addr));
     server_addr.sin_family = AF_INET;
     server_addr.sin_port = htons(atoi(port)); // 指定端口号,这里使用HTTP默认端口80
-    server_addr.sin_addr = *((struct in_addr *)hostinfo.h_addr_list[0]);
+    server_addr.sin_addr = *((struct in_addr *)hostinfo->h_addr_list[0]);
 
     // 绑定套接字到主机地址和端口号
     if (connect(platformNetwork->socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) != 0)