2016-09-11 1 views
1

내 코드는 다음과 같습니다.getaddrinfo가 HTTP에 대해 20480의 포트 번호를 반환하는 이유는 무엇입니까?

#include <stdio.h> 
#include <stdlib.h> 
#include <inttypes.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 

int main() 
{ 
    struct addrinfo *ai, *p; 

    if (getaddrinfo("localhost", "http", NULL, &ai) != 0) { 
     printf("error\n"); 
     return EXIT_FAILURE; 
    } 

    for (p = ai; p != NULL; p = p->ai_next) 
    { 
     if (p->ai_family == AF_INET) { 
      struct sockaddr_in *addr = (struct sockaddr_in *) p->ai_addr; 
      printf("IPv4 port: %d\n", addr->sin_port); 
     } else if (p->ai_family == AF_INET6) { 
      struct sockaddr_in6 *addr = (struct sockaddr_in6 *) p->ai_addr; 
      printf("IPv6 port: %d\n", addr->sin6_port); 
     } 
    } 

    return 0; 
} 

다음은 출력입니다.

$ gcc -std=c99 -D_POSIX_SOURCE -Wall -Wextra -pedantic foo.c 
$ ./a.out 
IPv6 port: 20480 
IPv6 port: 20480 
IPv4 port: 20480 
IPv4 port: 20480 

포트 번호가 80 일 것으로 예상했는데 출력에 20480이 표시되는 이유는 무엇입니까?

답변

7

포트는 네트워크 순서로 반환됩니다.

0x5000 = 20480

0x0050 = 80

: 반전 된 바이트 순서를 참조하십시오 ntohs(addr->sin_port)

를 호출 시도

관련 문제