summaryrefslogtreecommitdiff
path: root/lib/Zinternal.c
diff options
context:
space:
mode:
authorGravatar Dan Winship <danw@mit.edu>1999-10-22 12:53:48 +0000
committerGravatar Dan Winship <danw@mit.edu>1999-10-22 12:53:48 +0000
commit60a41d1368a9cee51f3c2c2c0469aa0f4fc77147 (patch)
treed92938ca6d6506ffcea0fe6909c97e8465ff2260 /lib/Zinternal.c
parent4e2a96898c62bd2f2e2a12042678f290da44bf13 (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.c12
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,