diff options
author | Dan Winship <danw@mit.edu> | 1999-10-22 12:53:48 +0000 |
---|---|---|
committer | Dan Winship <danw@mit.edu> | 1999-10-22 12:53:48 +0000 |
commit | 60a41d1368a9cee51f3c2c2c0469aa0f4fc77147 (patch) | |
tree | d92938ca6d6506ffcea0fe6909c97e8465ff2260 /lib/Zinternal.c | |
parent | 4e2a96898c62bd2f2e2a12042678f290da44bf13 (diff) |
return ETIMEDOUT after 60 seconds when waiting for a reply from zhm.
(in particular, this makes attach eventually time out when trying to get
filsrv subs if the zhm or zephyr servers aren't responding).
Diffstat (limited to 'lib/Zinternal.c')
-rw-r--r-- | lib/Zinternal.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Zinternal.c b/lib/Zinternal.c index 8efd05a..99b7de2 100644 --- a/lib/Zinternal.c +++ b/lib/Zinternal.c @@ -226,10 +226,22 @@ Code_t Z_ReadWait() char *slash; Code_t retval; register int i; + fd_set fds; + struct timeval tv; if (ZGetFD() < 0) return (ZERR_NOPORT); + FD_ZERO(&fds); + FD_SET(ZGetFD(), &fds); + tv.tv_sec = 60; + tv.tv_usec = 0; + + if (select(ZGetFD() + 1, &fds, NULL, NULL, &tv) < 0) + return (errno); + if (!FD_ISSET(ZGetFD(), &fds)) + return ETIMEDOUT; + from_len = sizeof(struct sockaddr_in); packet_len = recvfrom(ZGetFD(), packet, sizeof(packet), 0, |