فهرست منبع

update gethostbyname to getaddrinfo.

aozima 8 سال پیش
والد
کامیت
4c493c90b4
1فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 12 5
      webclient.c

+ 12 - 5
webclient.c

@@ -7,6 +7,7 @@
  * 2013-05-05     Bernard      the first version
  * 2013-06-10     Bernard      fix the slow speed issue when download file.
  * 2015-11-14     aozima       add content_length_remainder.
+ * 2017-12-23     aozima       update gethostbyname to getaddrinfo.
  */
 
 #include "webclient.h"
@@ -120,7 +121,7 @@ static int webclient_resolve_address(struct webclient_session *session, struct s
     char *ptr;
     char port[6] = "80"; /* default port of 80(http) */
     int i = 0, is_domain;
-    struct hostent *hptr;
+
     const char *host_addr = 0;
     int url_len, host_addr_len = 0;
 
@@ -206,14 +207,20 @@ static int webclient_resolve_address(struct webclient_session *session, struct s
     if (is_domain)
     {
         /* resolve the host name. */
-        hptr = gethostbyname(session->host);
-        if (hptr == 0)
+        struct addrinfo hint, *res = NULL;
+        int ret;
+
+        memset(&hint, 0, sizeof(hint));
+        ret = getaddrinfo(session->host, NULL, &hint, &res);
+        if (ret != 0)
         {
-            rt_kprintf("WEBCLIENT: failed to resolve domain '%s'\n", session->host);
+            rt_kprintf("getaddrinfo err: %d '%s'\n", ret, session->host);
             rc = -1;
             goto _exit;
         }
-        memcpy(&server->sin_addr, *hptr->h_addr_list, sizeof(server->sin_addr));
+
+        memcpy(server, res->ai_addr, sizeof(struct sockaddr_in));
+        freeaddrinfo(res);
     }
     else
     {