c-socket-programming:socket
تفاوتها
تفاوت دو نسخهٔ متفاوت از صفحه را مشاهده میکنید.
| نگارش قبل در دو طرفنگارش قبلنگارش بعد | نگارش قبل | ||
| c-socket-programming:socket [2024/06/19 08:32] – pejman | c-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 < | #include < | ||
| #include < | #include < | ||
| خط 30: | خط 35: | ||
| #define handle_error(msg) \ | #define handle_error(msg) \ | ||
| do { perror(msg); | do { perror(msg); | ||
| - | + | ||
| #define PORT " | #define PORT " | ||
| - | + | ||
| int main() | int main() | ||
| { | { | ||
| - | 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.ai_family = AF_UNSPEC; | + | |
| - | hints.ai_socktype = SOCK_DGRAM; | + | |
| - | hints.ai_flags = AI_PASSIVE; | + | |
| - | + | ||
| - | errcode = getaddrinfo(NULL, | + | |
| - | if (errcode != 0) { | + | |
| - | fprintf(stderr, | + | |
| - | exit(EXIT_FAILURE); | + | |
| - | } | + | |
| - | + | ||
| - | for (rp = res; rp != NULL; rp = rp-> | + | |
| - | sockfd = socket(rp-> | + | |
| - | if (sockfd == -1) { | + | |
| - | handle_error(" | + | |
| - | continue; | + | |
| - | } | + | |
| - | if (rp-> | + | |
| - | ipver = " | + | |
| - | addr = & | + | |
| - | } else { | + | |
| - | ipver = " | + | |
| - | addr = & | + | |
| - | } | + | |
| - | inet_ntop(rp-> | + | |
| - | fprintf(stdout, | + | |
| - | close(sockfd); | + | |
| - | } | + | |
| - | + | ||
| - | freeaddrinfo(res); | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| + | memset(& | ||
| + | hints.ai_family = AF_UNSPEC; | ||
| + | hints.ai_socktype = SOCK_DGRAM; | ||
| + | hints.ai_flags = AI_PASSIVE; | ||
| + | |||
| + | errcode = getaddrinfo(NULL, | ||
| + | if (errcode != 0) { | ||
| + | fprintf(stderr, | ||
| + | exit(EXIT_FAILURE); | ||
| + | } | ||
| + | |||
| + | for (rp = res; rp != NULL; rp = rp-> | ||
| + | sockfd = socket(rp-> | ||
| + | if (sockfd == -1) { | ||
| + | handle_error(" | ||
| + | continue; | ||
| + | } | ||
| + | if (rp-> | ||
| + | ipver = " | ||
| + | addr = & | ||
| + | } else { | ||
| + | ipver = " | ||
| + | addr = & | ||
| + | } | ||
| + | inet_ntop(rp-> | ||
| + | fprintf(stdout, | ||
| + | close(sockfd); | ||
| + | } | ||
| + | |||
| + | freeaddrinfo(res); | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| </ | </ | ||
| خروجی | خروجی | ||
| - | I got a IPv4 socket for 0.0.0.0 = 3 | + | I got an IPv4 socket for 0.0.0.0 = 3 |
| - | I got a IPv6 socket for :: = 3 | + | I got an IPv6 socket for :: = 3 |
c-socket-programming/socket.1718773371.txt.gz · آخرین ویرایش: 2024/06/19 08:32 توسط pejman
