- r = e = read_wait;
- select(maxfd, &r, NULL, &e, &seltime);
- for (i = 0; i < maxfd; i++)
- if (FD_ISSET(i, &e)) {
+ r = xmalloc(read_wait_size);
+ memcpy(r, read_wait, read_wait_size);
+ e = xmalloc(read_wait_size);
+ memcpy(e, read_wait, read_wait_size);
+
+ while (select(maxfd, r, NULL, e, &seltime) == -1 &&
+ (errno == EAGAIN || errno == EINTR))
+ ;
+
+ for (i = 0; i < maxfd; i++) {
+ if (FD_ISSET(i, e)) {