ابزار کاربر

ابزار سایت


c-socket-programming:socket

تفاوت‌ها

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

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

نگارش قبل در دو طرفنگارش قبل
نگارش بعد
نگارش قبل
c-socket-programming:socket [2024/06/19 08:32] pejmanc-socket-programming:socket [2024/06/19 10:03] (فعلی) pejman
خط 19: خط 19:
  
 <code C> <code C>
 +// socket.c
 +// gcc -std=c99 -Wall -Wextra -Werror -pedantic -o socket socket.c
 +
 +#define _POSIX_C_SOURCE 200112L
 +
 #include <stdio.h> #include <stdio.h>
 #include <string.h> #include <string.h>
خط 30: خط 35:
 #define handle_error(msg) \ #define handle_error(msg) \
     do { perror(msg); exit(EXIT_FAILURE); } while (0)     do { perror(msg); exit(EXIT_FAILURE); } while (0)
- +
 #define PORT "3440" #define PORT "3440"
- +
 int main() int main()
 { {
- int sockfd, errcode; +    int sockfd, errcode; 
- struct addrinfo hints, *res, *rp; +    struct addrinfo hints, *res, *rp; 
- char *ipver, ipstr[INET6_ADDRSTRLEN]; +    char *ipver, ipstr[INET6_ADDRSTRLEN]; 
- void *addr; +    void *addr;
-  +
- memset(&hints, 0, sizeof(hints)); +
- hints.ai_family = AF_UNSPEC; +
- hints.ai_socktype = SOCK_DGRAM; +
- hints.ai_flags = AI_PASSIVE;    /* For wildcard IP address */ +
-  +
- errcode = getaddrinfo(NULL, PORT, &hints, &res); +
- if (errcode != 0) { +
- fprintf(stderr, "getaddrinfo(): %s\n", gai_strerror(errcode)); +
- exit(EXIT_FAILURE); +
-+
-  +
- for (rp = res; rp != NULL; rp = rp->ai_next) { +
- sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); +
- if (sockfd == -1) { +
- handle_error("socket() error"); +
- continue; +
-+
- if (rp->ai_family == AF_INET) { +
- ipver = "IPv4"; +
- addr = &(((struct sockaddr_in*)(rp->ai_addr))->sin_addr); +
- } else { +
- ipver = "IPv6"; +
- addr = &(((struct sockaddr_in6*)(rp->ai_addr))->sin6_addr); +
-+
- inet_ntop(rp->ai_family, addr, ipstr, sizeof ipstr); +
- fprintf(stdout, "I got a %s socket for %s = %d\n", ipver, ipstr, sockfd); +
- close(sockfd); +
-+
-  +
- freeaddrinfo(res); +
-  +
- return 0; +
-}+
  
 +    memset(&hints, 0, sizeof(hints));
 +    hints.ai_family = AF_UNSPEC;
 +    hints.ai_socktype = SOCK_DGRAM;
 +    hints.ai_flags = AI_PASSIVE;    /* For wildcard IP address */
 +
 +    errcode = getaddrinfo(NULL, PORT, &hints, &res);
 +    if (errcode != 0) {
 +        fprintf(stderr, "getaddrinfo(): %s\n", gai_strerror(errcode));
 +        exit(EXIT_FAILURE);
 +    }
 +
 +    for (rp = res; rp != NULL; rp = rp->ai_next) {
 +        sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
 +        if (sockfd == -1) {
 +            handle_error("socket() error");
 +            continue;
 +        }
 +        if (rp->ai_family == AF_INET) {
 +            ipver = "IPv4";
 +            addr = &(((struct sockaddr_in*)(rp->ai_addr))->sin_addr);
 +        } else {
 +            ipver = "IPv6";
 +            addr = &(((struct sockaddr_in6*)(rp->ai_addr))->sin6_addr);
 +        }
 +        inet_ntop(rp->ai_family, addr, ipstr, sizeof ipstr);
 +        fprintf(stdout, "I got an %s socket for %s = %d\n", ipver, ipstr, sockfd);
 +        close(sockfd);
 +    }
 +
 +    freeaddrinfo(res);
 +
 +    return 0;
 +}
 </code> </code>
  
 خروجی خروجی
  
-  I got IPv4 socket for 0.0.0.0 = 3 +  I got an IPv4 socket for 0.0.0.0 = 3 
-  I got IPv6 socket for :: = 3+  I got an IPv6 socket for :: = 3
  
c-socket-programming/socket.1718773371.txt.gz · آخرین ویرایش: 2024/06/19 08:32 توسط pejman

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