[질문]솔라리스에서 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을 걸어야 하는지요?
좌절금지!!!
피할수 없다면 즐겨라.
댓글 달기