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 을 리턴하는가에 대한 파악이 필요할듯해요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.