[질문]솔라리스에서 dev/poll 사용시 ioctl 에러 발생
글쓴이: paraline / 작성시간: 목, 2004/12/16 - 1:21오전
솔라리스에서 dev/poll을 사용하여 서버 프로그래밍을 하고 있습니다.
if((wfd = open("/dev/poll", O_RDWR)) < 0) { perror("/dev/poll open failed!"); return FALSE; } struct pollfd fd[1]; fd[0].fd = fd; fd[0].events = POLLIN; fd[0].revents = 0; if(write(wfd, (const void *)&fd[0], sizeof(struct pollfd) * 1) != sizeof(struct pollfd) * 1) { perror("m_Wfd write failed!"); return FALSE; } dopoll.dp_timeout = ms; dopoll.dp_nfds = max; dopoll.dp_fds = pollfds; result = ioctl(wfd, DP_POLL, &dopoll); if(result < 0) { perror("/dev/poll ioctl DP_POLL failed"); exit(-1); }
평상시에는 잘 작동하다가, 클라이언트가 많이 접속했을때, ioctl이 -1을 리턴합니다. 그때 perror로 찍어보면 "Bad File Number"라고 나옵니다(EBADF).
분명히 wfd도 성공적으로 open했고, fd도 제대로 생성이 됐는데, 왜 이런 에러가 발생하는걸까요?
Forums:
혹시,wfd = open("/dev/poll", O_RDWR);이
혹시,
wfd = open("/dev/poll", O_RDWR);
이 루틴을 멀티쓰레드 환경에서 사용할 경우, wfd가 겹칠 경우가 있나요?
그렇다면, 멀티쓰레드 환경에서는 open하기전에 lock을 걸어야 하는지요?
좌절금지!!!
피할수 없다면 즐겨라.
댓글 달기