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을 리턴합니다.
댓글 달기