[ LinuxFreeBSD ] in KIDS 글 쓴 이(By): giganti (서 수 민) 날 짜 (Date): 2001년 6월 29일 금요일 오후 02시 34분 58초 제 목(Title): Re: select()에 관한 질문 아래의 간단한 테스트 프로그램을 보시면 socket만 생성한 뒤 select하도록 해 놓았습니다. 그래도 바로 select에서 return되어서 select success를 print하는거죠. UDP로 socket을 생성하게 되면 select에서 return되어 나오지 않습니다. main(int argc, char **argv) { int sid; struct sockaddr_in sa, newsa; int slen; int ret ; fd_set readfds, exceptfds; sa.sin_family = AF_INET; sa.sin_addr.s_addr = INADDR_ANY; sa.sin_port = htons(8684); sid = socket(AF_INET, SOCK_STREAM,0); if (sid < 0){ TracePrint("socket create error\n"); exit(0); } TracePrint("socket success\n"); /* ret = bind(sid, (struct sockaddr *)&sa, sizeof(struct sockaddr)); if (ret < 0){ TracePrint("bind error\n"); exit(0); } TracePrint("bind success\n"); ret = listen(sid, 5); if (ret < 0){ TracePrint("listen error\n"); exit(0); } */ TracePrint("listen success\n"); FD_ZERO(&readfds); FD_ZERO(&exceptfds); FD_SET(sid, &readfds); FD_SET(sid, &exceptfds); while(1){ TracePrint("select before\n"); ret = select(sid+1, &readfds, NULL, &exceptfds, NULL); if (ret == 0){ TracePrint("select timeout\n"); continue; } if (ret == -1){ TracePrint("select error\n"); break; } if (FD_ISSET(sid, &readfds)){ TracePrint("select success\n"); /* slen = sizeof(struct sockaddr); ret = accept(sid, (struct sockaddr *)&newsa, &slen); if (ret <= 0){ TracePrint("accept error\n"); break; } */ } sleep(10); } close(sid); TracePrint("program success\n"); } |