2016-09-11 8 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)

を呼び出してみてください

関連する問題