ابزار کاربر

ابزار سایت


c-socket-programming:getaddrinfo

تفاوت‌ها

تفاوت دو نسخهٔ متفاوت از صفحه را مشاهده می‌کنید.

پیوند به صفحه‌ی تفاوت‌ها

نگارش قبل در دو طرفنگارش قبل
نگارش بعد
نگارش قبل
c-socket-programming:getaddrinfo [2024/06/19 09:05] pejmanc-socket-programming:getaddrinfo [2024/06/28 13:31] (فعلی) pejman
خط 107: خط 107:
     char *node = "www.yahoo.com";     char *node = "www.yahoo.com";
  
-    int errcode; +    struct addrinfo hints, *res;
-    struct addrinfo hints, *res ,*p;+
  
     memset(&hints, 0, sizeof hints);     memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC; +    hints.ai_family = AF_UNSPEC;        
-    hints.ai_socktype = SOCK_STREAM;+    hints.ai_socktype = SOCK_STREAM;    // defined in /usr/include/bits/socket_type.h
     hints.ai_protocol = 0;     hints.ai_protocol = 0;
  
-    errcode = getaddrinfo(node, NULL, &hints, &res);+    int errcode = getaddrinfo(node, NULL, &hints, &res);
     if (errcode != 0) {     if (errcode != 0) {
         fprintf(stderr, "getaddrinfo() error: %s\n", gai_strerror(errcode));         fprintf(stderr, "getaddrinfo() error: %s\n", gai_strerror(errcode));
خط 123: خط 122:
     printf("\nInternet addresses of %s :\n\n", node);     printf("\nInternet addresses of %s :\n\n", node);
  
-    for (p = res; p != NULL; p = p->ai_next) {+    for (struct addrinfo *p = res; p != NULL; p = p->ai_next) {
         char *ipver, ipstr[INET6_ADDRSTRLEN];         char *ipver, ipstr[INET6_ADDRSTRLEN];
         void *addr;         void *addr;
خط 140: خط 139:
         printf("  %s: %s\n", ipver, ipstr);         printf("  %s: %s\n", ipver, ipstr);
     }     }
-    printf("\n"); 
  
     freeaddrinfo(res);     freeaddrinfo(res);
خط 160: خط 158:
  
  
-همانطور که در قسمت Feature Test Macro در manual نوشته شده برای اینکه تعریف تابع ()getaddrinfo از طریق header در دسترس باشد (expost شود) در gcc های ورژن بالاتر از 2.22 باید ماکرو زیر تعریف شود+همانطور که در قسمت Feature Test Macro در manual نوشته شده برای اینکه تعریف توابع ()getaddrinfo و ()freeaddrinfo و ()gai_strerror و استراکچر های مورد نیاز، از طریق header در دسترس باشند (expose شوند) در gcc های ورژن بالاتر از 2.22 باید ماکرو زیر تعریف شود
  
   #define _POSIX_C_SOURCE 200112L   #define _POSIX_C_SOURCE 200112L
  
-برای بررسی کار کرد ماکرو فوق، می توان یک بار بدون ماکرو بالا و یک بار با وجود ماکرو بالا از دستور زیر استفاده کنیم و در خروجی دنبال تعریف struct addrinfo بگردیم. خواهیم دید که بدون ماکرو فوق این استراکچر تعریف نمیشود+برای بررسی کار کرد ماکرو فوق، می توان یک بار بدون ماکرو و یک بار با وجود ماکرو، از دستور زیر استفاده کنیم و در خروجی، تعریف struct addrinfo را جستجو کنیم. خواهیم دید که بدون ماکرو فوق این استراکچر تعریف نمیشود
  
   gcc -std=c99 -E getaddrinfo.c   gcc -std=c99 -E getaddrinfo.c
 +
c-socket-programming/getaddrinfo.1718775340.txt.gz · آخرین ویرایش: 2024/06/19 09:05 توسط pejman

به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki