--- libfcgi/os_unix.c.orig Wed Aug 2 05:36:43 2000 +++ libfcgi/os_unix.c Sun Aug 20 14:32:35 2000 @@ -404,9 +404,13 @@ */ int OS_Read(int fd, char * buf, size_t len) { - return(read(fd, buf, len)); + int result; + do { + result = read(fd, buf, len); + } while((result == -1) && (errno == EINTR)); + return(result); } - + /* *-------------------------------------------------------------- * @@ -425,10 +429,13 @@ */ int OS_Write(int fd, char * buf, size_t len) { - return(write(fd, buf, len)); + int result; + do { + result = write(fd, buf, len); + } while((result == -1) && (errno == EINTR)); + return(result); } - /* *---------------------------------------------------------------------- * @@ -753,8 +760,10 @@ * any work to do. */ if(numRdPosted == 0 && numWrPosted == 0) { - selectStatus = select((maxFd+1), &readFdSetCpy, &writeFdSetCpy, - NULL, tmo); + do { + selectStatus = select((maxFd+1), &readFdSetCpy, &writeFdSetCpy, + NULL, tmo); + } while ((selectStatus == -1) && (errno == EINTR)); if(selectStatus < 0) { exit(errno); } @@ -1020,11 +1029,15 @@ { struct timeval tval = { READABLE_UNIX_FD_DROP_DEAD_TIMEVAL }; fd_set read_fds; + int result; FD_ZERO(&read_fds); FD_SET(fd, &read_fds); - return select(fd + 1, &read_fds, NULL, NULL, &tval) >= 0 && FD_ISSET(fd, &read_fds); + do { + result = select(fd + 1, &read_fds, NULL, NULL, &tval); + } while((result == -1) && (errno == EINTR)); + return result >= 0 && FD_ISSET(fd, &read_fds); } /*