- do {
- ntries++;
- memset(&tv, 0, SIZEOF(tv));
- tv.tv_sec = timeout;
- memset(&readset, 0, SIZEOF(readset));
- FD_ZERO(&readset);
- FD_SET(server_socket, &readset);
- nfound = select(server_socket+1, &readset, NULL, NULL, &tv);
- if(nfound <= 0 || !FD_ISSET(server_socket, &readset)) {
- save_errno = errno;
- if(nfound < 0) {
- dbprintf(_("stream_accept: select() failed: %s\n"),
- strerror(save_errno));
- } else if(nfound == 0) {
- dbprintf(plural(_("stream_accept: timeout after %d second\n"),
- _("stream_accept: timeout after %d seconds\n"),
- timeout),
- timeout);
- errno = ETIMEDOUT;
- return -1;
- } else if (!FD_ISSET(server_socket, &readset)) {
- int i;
-
- for(i = 0; i < server_socket + 1; i++) {
- if(FD_ISSET(i, &readset)) {
- dbprintf(_("stream_accept: got fd %d instead of %d\n"),
- i,
- server_socket);
- }
- }
- save_errno = EBADF;
- }
- if (ntries > 5) {
- errno = save_errno;
- return -1;
- }
- }
- } while (nfound <= 0);