ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. getaddrinfo
³×Æ®¿öÅ© ÁÖ¼Ò Á¤º¸¸¦ °¡Á®¿Â´Ù. »ç¿ë ¹ý#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res);
void freeaddrinfo(struct addrinfo *res);
¸Å°³ º¯¼ö
¼³¸í
ÀÌ ÇÔ¼ö´Â node¿Í serviceÁ¤º¸¸¦ ÀÌ¿ëÇØ¼ ÀÎÅÍ³Ý È£½ºÆ®¿Í ¼ºñ½º¿¡ ´ëÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ÁÖ¼Ò Á¤º¸¸¦ ´ã°í ÀÖ´Â, addrinfo ±¸Á¶Ã¼ÀÇ ¸ñ·ÏÀ» ¹ÝȯÇÑ´Ù. addrinfo ±¸Á¶Ã¼´Â ÇØ´ç È£½ºÆ®¿Í ¼ºñ½º¿¡ ´ëÀÀµÇ´Â ÁÖ¼Ò Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù. À̵é ÁÖ¼Ò Á¤º¸´Â bind(2)¿Í connect(2)µîÀÇ ÇÔ¼ö¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
addrinfo ±¸Á¶Ã¼ struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
size_t ai_addrlen;
struct sockaddr *ai_addr;
char *ai_canonname;
struct addrinfo *ai_next;
};
¹Ýȯ °ª
ÀÌ ÇÔ¼ö´Â ¼º°øÇϸé 0, ½ÇÆÐÇϸé 0ÀÌ ¾Æ´Ñ °ªÀ» ¹ÝȯÇÑ´Ù.
¿¹Á¦#include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> #include <arpa/inet.h> int main(int argc, char **argv) { struct addrinfo hints; struct addrinfo *result, *rp; struct sockaddr_in *sin; struct sockaddr_in6 *sin6; int *listen_fd; int listen_fd_num=0; char buf[80] = {0x00,}; int i = 0; if(argc != 2) { printf("Usage : %s [port]\n", argv[0]); return 1; } memset(&hints, 0x00, sizeof(struct addrinfo)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; if(getaddrinfo(NULL, argv[1], &hints, &result) != 0 ) { perror("getaddrinfo"); return 1; } for(rp = result ; rp != NULL; rp = rp->ai_next) { listen_fd_num++; } listen_fd = malloc(sizeof(int)*listen_fd_num); printf("Num %d\n", listen_fd_num); for(rp = result, i=0 ; rp != NULL; rp = rp->ai_next, i++) { if(rp->ai_family == AF_INET) { sin = (void *)rp->ai_addr; inet_ntop(rp->ai_family, &sin->sin_addr, buf, sizeof(buf)); printf("<bind Á¤º¸ %d %d %s>\n", rp->ai_protocol, rp->ai_socktype, buf); } else if(rp->ai_family == AF_INET6) { sin6 = (void *)rp->ai_addr; inet_ntop(rp->ai_family, &sin6->sin6_addr, buf, sizeof(buf)); printf("<bind Á¤º¸ %d %d %s>\n", rp->ai_protocol, rp->ai_socktype, buf); } if((listen_fd[i] = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol)) < 0) { printf("Socket Create Error\n"); } if(rp->ai_family == AF_INET6) { int opt = 1; setsockopt(listen_fd[i], IPPROTO_IPV6, IPV6_V6ONLY, (char *)&opt, sizeof(opt)); } if(bind(listen_fd[i], rp->ai_addr, rp->ai_addrlen) != 0) { if(errno != EADDRINUSE); { perror("bind error\n"); return 1; } } if(listen(listen_fd[i], 5) != 0) { perror("listen error\n"); return 1; } } freeaddrinfo(result); pause(); return 1; } |
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|