Anyway, I tracked down the problem to the post-select handling. It doesn't quite match the pre-select handling. The attached patch makes it so. This patch is not platform-specific, but obviously only affects platforms w/out poll().
take it easy, Charlie
*** poll.c Thu Sep 26 11:11:46 2002
--- /tmp/poll.c Tue Aug 6 17:06:12 2002
***************
*** 284,305 ****
for (i = 0; i < num; i++) {
apr_os_sock_t fd;
- aprset[i].rtnevents = 0;
-
if (aprset[i].desc_type == APR_POLL_SOCKET) {
fd = aprset[i].desc.s->socketdes;
}
! else if (aprset[i].desc_type == APR_POLL_FILE) {
! #if APR_FILES_AS_SOCKETS
! fd = aprset[i].desc.f->filedes;
! #else
return APR_EBADF;
#endif
}
! else if (aprset[i].desc_type == APR_NO_DESC) {
! continue;
! }
!
if (FD_ISSET(fd, &readset)) {
aprset[i].rtnevents |= APR_POLLIN;
}
--- 284,300 ----
for (i = 0; i < num; i++) {
apr_os_sock_t fd;
if (aprset[i].desc_type == APR_POLL_SOCKET) {
fd = aprset[i].desc.s->socketdes;
}
! else {
! #if !APR_FILES_AS_SOCKETS
return APR_EBADF;
+ #else
+ fd = aprset[i].desc.f->filedes;
#endif
}
! aprset[i].rtnevents = 0;
if (FD_ISSET(fd, &readset)) {
aprset[i].rtnevents |= APR_POLLIN;
}
