소켓 프로그래밍 중 gethostbyname 함수에 대해 질문합니다~
host=gethostbyname(argv[1]);
if(!host)
error_handling("gethost... error");
printf("Official name: %s \n", host->h_name);
for(i=0; host->h_aliases[i]; i++)
printf("Aliases %d: %s \n", i+1, host->h_aliases[i]);
printf("Address type: %s \n",
(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");
for(i=0; host->h_addr_list[i]; i++)
printf("IP addr %d : %s \n", i+1,
inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
return 0;
위의 예제 중에서 inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
이 부분이 이해가 잘 안가는데요. 먼저 h_addr_list가 가리키는 것은 문자열 포인터 배열이고, 그리고 각각의 요소들은 in_addr 구조체 변수의 주소값을 가리키고 있어서
실제 저장되는 값은 4바이트 정수형태의 IP주소값이 들어있기 때문에 적절히 형변환 하여 inet_ntoa 함수 호출로 문자열 형태의 ip주소를 출력한다고 한다면,
inet_ntoa 함수의 인자는 in_addr 구조체의 변수를 필요로 하기 때문에 먼저 host를 in_addr 구조체로 형변환하고 그 구조체가 가리키는 정수형태의 IP정보를 참조하여
문자열 형태의 IP정보로 변환해주는 것이 맞나요?
댓글 달기