Socket 프로그래밍 질문입니다.
      글쓴이: lovejin0309 / 작성시간: 월, 2006/04/03 - 4:51오후    
  
  다음은 소스입니다.
int UCAMP_HS_Event_listen_ENGINE()
{
 
    struct  timeval Time_Value;
    struct  sockaddr_in server_addr;
    struct  hostent     *he;
    fd_set  readfds;
    int     error;
    int     MSG_LEN;
    int     i;
    int     count = 0;
    char    Header[16];
    char    message[1024];
 
 
    if(SockFD > 0) close(SockFD);
 
    SockFD = socket(AF_INET, SOCK_STREAM, 0);
    if(SockFD != -1) printf("소켓 ok\n");
 
    he = gethostbyname("192.168.1.110");
 
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(1801);
    server_addr.sin_addr = *((struct in_addr *)he->h_addr);
    bzero(&(server_addr.sin_zero), 8);
 
    error = connect(SockFD, (struct sockaddr *) &server_addr, sizeof(struct sockaddr));
    if(error != -1) printf("연결 ok\n");
 
 
 
    while(1){
    printf("Wait\n");
 
    Time_Value.tv_sec   = 10;
    Time_Value.tv_usec  = 0;
 
    FD_ZERO(&readfds);
    FD_SET(SockFD, &readfds);
 
    select(SockFD+4, &readfds, NULL, NULL, &Time_Value);
 
        if(FD_ISSET(SockFD, &readfds)){
            memset(message, '\0', sizeof(message));
            error = recv(SockFD, message, 8, 0);
 
            printf("헤더는 %s 입니다. \n", message);
 
            Header[0] = message[1];
            Header[1] = message[2];
            Header[2] = message[3];
            Header[3] = message[4];
            Header[4] = message[5];
            Header[5] = message[6];
            Header[6] = message[7];
            Header[7] = '\0';
 
            MSG_LEN = atoi(Header); 
 
            if(MSG_LEN > 0){
                printf("MSG_LEN = %d\n", MSG_LEN);
                error = recv(SockFD, message, MSG_LEN, 0);
                count++;        
                printf("본문은 %s \n 받은 횟수는 %d 입니다. \n", message,count);
                continue;
            }else{
                printf("연결 확인 메시지 입니다. \n");
                continue;
            }
        }
    }
}위와 같은 소스를 컴파일해서 실행시키면
192.168.1.110 서버와 연결이 됩니다.
이후 서버에서 메시지를 한 번 보내면 수신한 메시지를 출력한 후 다시 대기 상태로 들어가야 하는데, 메시지를 한 번 수신해서 출력한 후 대기를 하지 않고 "wait" 문자열만 계속 찍습니다.
어떻게 해결해야 할까요?
Forums: 


time-out 처리는?
저 코드에 따르면 10초마다 wait 를 찍는게 맞아요.
timeout이 발생하면 select는 0을 리턴합니다.
댓글 달기