#include #include #include #include #include "io_internal.h" int64 io_waituntil2(int64 milliseconds) { struct pollfd* p; long i,r; if (!io_wanted_fds) return 0; for (i=r=0; icanread=e->canwrite=0; if (e->wantread || e->wantwrite) { struct pollfd* p; if ((p=array_allocate(&io_pollfds,sizeof(struct pollfd),r))) { p->fd=i; p->events=(e->wantread?POLLIN:0) + (e->wantwrite?POLLOUT:0); ++r; } else return -1; } } p=array_start(&io_pollfds); again: while ((i=poll(array_start(&io_pollfds),r,milliseconds))==0); if (i==-1) { if (errno==EINTR) goto again; return -1; } for (i=0; ifd); if (p->revents&POLLIN) e->canread=1; if (p->revents&POLLOUT) e->canwrite=1; p++; } return i; }