#include #include #include #include #include "io_internal.h" void io_wait() { struct pollfd* p; long i,r; if (!io_wanted_fds) return; 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; } } p=array_start(&io_pollfds); while ((i=poll(array_start(&io_pollfds),r,99999999))==0); if (i==-1) return; for (i=0; ifd); if (p->revents&POLLIN) e->canread=1; if (p->revents&POLLOUT) e->canwrite=1; p++; } }