한다 getaddrinfo의 정의는()입니다 :getaddrinfo()가 함수의 입력 부분에 값을 반환하는 이유는 무엇입니까?
int getaddrinfo(const char *node, // e.g. "www.example.com" or IP
const char *service, // e.g. "http" or port number
const struct addrinfo *hints,
struct addrinfo **res);
당 Beej의 site는 말한다 :
", 당신은이 기능을 3 개 개의 입력 매개 변수를 제공하고, 링크 된 목록에 당신에게 포인터를 제공합니다 고해상도, 결과의. "
사용의 관점에서입니다
if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("server: socket");
continue;
}
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,
sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("server: bind");
continue;
}
break;
}
실제 반환 값」rv는 "실제로 사용되지 않습니다. 그러나이 결과는 네 번째 입력 "res"또는 "servinfo"에서 가져옵니다. 연결된 목록이 관련되어 있음을 이해하지만 함수 반환이 정상적인 방식으로 작동하지 않는 이유는 분명하지 않습니다. "rv"가 주소를 얻기 위해 반복되는 배열이 아닌 이유는 무엇입니까? 입력이 결과를 반환하는 이유는 무엇입니까?
매우 자세히 보면 'rv'가 실제로 두 번째 줄에 사용됩니다. 'gai_seterror'로 전달되면 오류 메시지를 사용자에게 형식화하여 호출이 실패한 이유를 나타냅니다. – selbie
C *에서 참조로 패스를 에뮬레이션하는 방법에 대해 조사하십시오. –
타사 사이트를 참조 용으로 사용할 수 없습니다. * man * page에 대한 의견을 나누셨습니까? – EJP