+ if (!FD_ISSET(purd->fd, &s->rfds)) {
+ struct timeval tmp;
+ tv_add(&purd->last_read_time, &(struct timeval)EMBRACE(5, 0),
+ &tmp);
+ ret = -E_UDP_TIMEOUT;
+ if (tv_diff(now, &tmp, NULL) > 0)
+ goto err;
+ return;
+ }
+ iovcnt = btr_pool_get_buffers(purd->btrp, iov);
+ ret = -E_UDP_OVERRUN;
+ if (iovcnt == 0)
+ goto err;
+ ret = para_readv(purd->fd, iov, iovcnt);
+ /* EAGAIN is possible even if FD_ISSET */
+ if (ret < 0 && is_errno(-ret, EAGAIN))