inet_ntoa함수 관련 질문있습니다.. 이해가 안가네요 ㅠ
글쓴이: daimon123 / 작성시간: 토, 2014/12/06 - 12:02오전
쓰레드를 이용한 채팅 서버 소스중 일부입니다.
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출력부분을 제외하면 정상작동은 됩니다.
고수님들의 조언 부탁드립니다. ㅠ
Forums:


음.. accept 리턴값 체크해보세요..
왜 inet_ntoa 가 NULL 을 리턴하는가에 대한 파악이 필요할듯해요..
댓글 달기