/dev/epoll에 대해 답글을 올리다가 원래 글이 없어졌네요.
글쓴이: stoneshim / 작성시간: 토, 2003/05/03 - 4:16오전
답글을 올리려고 했는데... 원래 글이 없어져 버렸습니다.
쓰신 분이 없애신건지... 아니면 뭔가 잘못되어서 글이 삭제된건지 알수 없어서 그냥 답글을 새로 올립니다.
for(i=0;i<MAXSOCKS;i++){ fds[i].fd=-1; fds[i].events=POLLIN; fds[i].revents=0; } if (write(wfd, &fds[0],sizeof(struct pollfd) * MAXSOCKS) != sizeof(struct pollfd) * MAXSOCKS){ perror("failed to write all pollfds"); close (wfd); exit(-1); }
이 부분에서 for loop이 관심있는 fd에 대해 설정하는 부분이고, write 하는 부분이 실제로 관심 fd들을 등록하는 부분입니다.
result = ioctl(wfd, DP_POLL, &dopoll);
이 코드에서 result값이 등록된 fd들 중에 event가 발생된 fd의 개수가 됩니다.
if (dopoll.dp_fds[i].revents & POLLIN) { ... }
이 부분에서 fd가 listening fd라면 accept를 하시면 되고 accept한 fd에 대해 등록하시려면, 이후에 다시 polling( 결국 ioctl 이죠) 하시기 전에 for loop에서 connected fd를 관심 fd로 설정하시고 write에서 등록하시면 됩니다.
timeout부분에서는 대부분의 polling 방식과 마찬가지로 -1이면 계속 기다리게 되니 잘 생각하시고 timeout 값을 선택하셔야 합니다.
Forums:
쓸때 잠시 깜빡 해서 제목을 잘못썼네요... ^^/dev/epol
쓸때 잠시 깜빡 해서 제목을 잘못썼네요... ^^
/dev/epoll이 아니라 /dev/poll관련 내용입니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
댓글 달기