#include #include #include #ifndef NDEBUG #include #endif #include "select_wrapper.h" int select_wrapper(const int* readfds, int num_readfds, const int* writefds, int num_writefds, const int* exceptfds, int num_exceptfds, char timeout, long secs, long usecs) { struct timeval tv; tv.tv_sec = secs; tv.tv_usec = usecs; int nfds = -1; fd_set rfds; FD_ZERO(&rfds); for (int i = 0; i < num_readfds; i++) { #ifndef NDEBUG printf("select_wrapper.c: Registering read FD %d.\n", readfds[i]); #endif FD_SET(readfds[i], &rfds); if (readfds[i] > nfds) nfds = readfds[i]; } fd_set wfds; FD_ZERO(&wfds); for (int i = 0; i < num_writefds; i++) { #ifndef NDEBUG printf("select_wrapper.c: Registering write FD %d.\n", writefds[i]); #endif FD_SET(writefds[i], &wfds); if (writefds[i] > nfds) nfds = writefds[i]; } fd_set efds; FD_ZERO(&efds); for (int i = 0; i < num_exceptfds; i++) { #ifndef NDEBUG printf("select_wrapper.c: Registering exception FD %d.\n", exceptfds[i]); #endif FD_SET(exceptfds[i], &efds); if (exceptfds[i] > nfds) nfds = exceptfds[i]; } nfds++; int ret = -1; if (timeout) ret = select(nfds, &rfds, &wfds, &efds, &tv); else ret = select(nfds, &rfds, &wfds, &efds, NULL); #ifndef NDEBUG printf("select_wrapper.c: Returning %d.\n", ret); #endif return ret; }