inet_ntoa함수 관련 질문있습니다.. 이해가 안가네요 ㅠ

daimon123의 이미지

쓰레드를 이용한 채팅 서버 소스중 일부입니다.

int main(int argc,char **argv)
{
    int listensock,connsock;
 
    struct sockaddr_in server;
    struct sockaddr_in s_client;
    int len;
    int i;
    int res;
 
    if(argc != 2)
    {
	printf("%s 의 포트 넘버를 입력해 주세요.. \n",argv[0]);
	exit(1);
    }
    if(pthread_mutex_init(&mutex,NULL) != 0)//뮤텍스 초기화 함수,실패시 0 이외의 값을 반환
    {
	printf("뮤텍스 초기화  실패 \n");
	return -1;
    }
 
    listensock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
 
    memset(&server,0,sizeof(server));//server주소 정보를 담고있는 구조체 정보 0으로 초기화
 
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    server.sin_port = htons(atoi(argv[1]));
    server.sin_family = AF_INET;
 
    if(bind(listensock,(struct sockaddr *)&server,sizeof(server)) == -1) //bind,실패일경우
    {
	printf("bind()할수 없습니다.. \n");
	return -1;
 
    }
 
    if(listen(listensock,MAX_CLIENT) == -1)//대기용 소켓(listensock)으로 클라이언트 connect요청을 기다린다,대기큐 사이즈 = MAX_CLIENT(5)
    {
	printf("listen 실패.. \n");
	return -1;
    }
       printf("Listen....\n");
 
    for(i = 0; i < MAX_CLIENT;i++)
    {
	list_c[i] = INVALID_SOCK; 
    }
    while(1)
    {
	int n=0;
	len = sizeof(s_client);
 
	connsock = accept(listensock,(struct sockaddr *)&s_client,&len);
	char *str;
	char ipaddr[64];
	str = inet_ntoa(s_client.sin_addr);
	printf("%s 의 클라이언트가 접속.. \n",str); //이부분이 core dump 뜨면서 세그멘테이션 오류가 계속나는데요 이유를 모르겠네요 ㅠ  

클라이언트부분은

connsock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
 
    memset(&client,0,sizeof(client));
    client.sin_addr.s_addr = inet_addr(argv[1]);
    client.sin_family = AF_INET;
    client.sin_port = htons(atoi(argv[2]));
 
    printf("사용자 명을 입력하세요 \n");
    scanf("%s",nickname);
 
    if(connect(connsock,(struct sockaddr*)&client,sizeof(client)) == -1)
    {
	printf("connect에 실패했습니다. \n");
	return -1;
    }

위와같은 주소형식을 넣어주었구요.. 저 inet_ntoa 클라이언트 ip출력부분을 제외하면 정상작동은 됩니다.
고수님들의 조언 부탁드립니다. ㅠ
익명 사용자의 이미지

왜 inet_ntoa 가 NULL 을 리턴하는가에 대한 파악이 필요할듯해요..