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