This is certainly not neccessary on linux, but it does not hurt
and is clearly more portable.
ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds, &s->timeout);
if (ret < 0)
return ret;
+ if (ret == 0) {
+ /*
+ * APUE: Be careful not to check the descriptor sets on return
+ * unless the return value is greater than zero. The return
+ * state of the descriptor sets is implementation dependent if
+ * either a signal is caught or the timer expires.
+ */
+ FD_ZERO(&s->rfds);
+ FD_ZERO(&s->wfds);
+ }
gettimeofday(now, NULL);
sched_post_select(s);
if (list_empty(&pre_select_list) && list_empty(&post_select_list))