소스 파일
------------------------------------------------------------------------------------------------------------
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
struct hostent *hp;
struct in_addr in;
int i;
char buf[20];
printf("No error1\n");
hp = gethostbyname(argv[1]);
if(hp = NULL)
{
printf("gethostbyname fail \n");
exit(0);
}
printf("호스트 이름 : %s \n", hp->h_name);
printf("호스트 주소타입 번호 : %d \n", hp->h_addrtype);
printf("호스트 주소의 길이 : %d \n", hp->h_length);
for(i=0;hp->h_addr_list[i];i++)
{
memcpy(&in.s_addr, hp->h_addr_list[i], sizeof(in.s_addr));
inet_ntop(AF_INET, &in, buf, sizeof(buf));
printf("IP주소(%d번째) : %s \n", i+1, buf);
}
for(i=0;hp->h_aliases[i];i++)
printf("호스트 별명(%d 번째) : %s", i+1, hp->h_aliases[i])
return 0;
}
------------------------------------------------------------------------------------------------------------
리눅스 상에서 이러한 프로그램을 돌리려고 하는데 세그멘테이션 오류가 발생합니다.
좀 더 정확히 알아보려고 printf문을 소스문 사이에 넣어서 알아본결과
hp를 참조하려 할 때 오류가 발생하고, hp의 주소를 출력해 본 결과 nil값이 나왔습니다. (main함수로 넘겨준 argument값은
www.google.com입니다.) 그렇다는 것은 gethostbyname()함수가 제대로 동작이 안되었다는 것이고, if(hp = NULL)이라는 조건문이...... 아......... 감사합니다.
질문글 올리다가 답을 찾았습니다.