diff --git a/uselect.c b/uselect.c new file mode 100644 index 00000000..7e0e2935 --- /dev/null +++ b/uselect.c @@ -0,0 +1,30 @@ +#include +#include +#include "uselect.h" + +/* for logging */ +#include "sics.h" +#include "commandlog.h" + +/* an uninterruptable version of select. M.Z. Oct 2008 */ + +static int cnt; + +int uselect(int nfds, + fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout) { + + sigset_t sigmask; + struct timespec tmo; + int result; + char buffer[80]; + + sigfillset(&sigmask); + tmo.tv_sec = timeout->tv_sec; + tmo.tv_nsec = timeout->tv_usec * 1000; + result = pselect(nfds, readfds, writefds, exceptfds, &tmo, &sigmask); + if (result < 0 && errno == EINTR) { + WriteToCommandLog("SYS>","pselect was interrupted!"); + } + return result; +} diff --git a/uselect.h b/uselect.h new file mode 100644 index 00000000..4d848d92 --- /dev/null +++ b/uselect.h @@ -0,0 +1,7 @@ +#include + +/* an uninterruptable version of select. M.Z. Oct 2008 */ + +int uselect(int nfds, + fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + struct timeval *timeout);