LinuxFreeBSD

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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");
}

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.