ssize_t readtimed(int fd, void *buf, size_t nbyte, double seconds) { struct timeval timedone; timedone = add2currenttime(seconds); if (waitfdtimed(fd, timedone) == -1) return (ssize_t) (-1); return r_read(fd, buf, nbyte); }
/* * recvfromtimedone * Retrieve information from a file descriptor with */ int recvfromtimedone(int fd, void *buf, size_t nbytes, struct sockaddr_in *ubufp, struct timeval timedone) { unsigned int len = sizeof(struct sockaddr_in); struct sockaddr *remote = (struct sockaddr *)ubufp; int retval; if ((retval = waitfdtimed(fd, timedone)) > 0) { while ((retval = recvfrom(fd, buf, nbytes, 0, remote, &len)) == -1) ; } return retval; }
ssize_t u_recvfromtimed(int fd, void *buf, size_t nbytes, u_buf_t *ubufp, double seconds) { int len; struct sockaddr *remote; int retval; struct timeval timedone; timedone = add2currenttime(seconds); if (waitfdtimed(fd, timedone) == -1) return (ssize_t)(-1); len = sizeof (struct sockaddr_in); remote = (struct sockaddr *)ubufp; while (((retval = recvfrom(fd, buf, nbytes, 0, remote, &len)) == -1) && (errno == EINTR)) ; return retval; }