프로그래밍

 3198, 1/160 회원가입  로그인  
   hyeon_sl
   tcp/ip 소켓프로그래밍 질문이있습니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3478 [복사]


우선 소스부터 보여드리겠습니다.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
void error_handling(char *message);

int main(int argc, char *argv[])
{
        int serv_sock;
        int clnt_sock;

        struct sockaddr_in serv_addr;
        struct sockaddr_in clnt_addr;
        socklen_t clnt_addr_size;

        char message[]="Hello World!";

        if(argc!=2)
        {
                printf("Usage : %s <port>\n", argv[0]);
                exit(1);
        }

        serv_sock=socket(PF_INET, SOCK_STREAM, 0);
        if(serv_sock ==-1)
                error_handling("socket() error");

        memset(&serv_addr, 0, sizeof(serv_addr));
        serv_addr.sin_family=AF_INET;
        serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        serv_addr.sin_port=htons(atoi(argv[1]));

        if(bind(serv_sock,(struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)
                error_handling("listen() error");

        clnt_addr_size=sizeof(clnt_addr);
        clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
        if(clnt_sock==-1)
                error_handling("accept() error");

        write(clnt_sock, message, sizeof(message));
        close(clnt_sock);
        close(serv_sock);
        return 0;
}

void error_handling(char *message)
{
        fputs(message, stderr);
        fputc('\n',stderr);
        exit(1);
}

리눅스에서 컴파일하여 포트 입력해서 실행시키면 accept함수에서 파일디스크립터? 이게 되서 클라이언트가 연결요청을 했을때 문자열이 출력되야하는데 실패해서 accept() error가 뜨네요. 책에 나온 소스 그대로 따라 친건데 뭐가 문제인지 잘모르겠네요
그리고 제가 c언어 한번 배운후에 제가 정보보안가 쪽으로 진로를 잡고 tcp/ip소켓프로그래밍을 배우고있는중인데 이게 과연 정보보안과 관련이 있는건지 의문이 좀 가네요..

  Hit : 4629     Date : 2012/08/03 04:08



    
보안왕 &clnt_addr_size
이 부분에서 & 주소값을 보내지 말고
clnt_addr_size로 써보세요.
2012/10/10