ssize_t suiolite::input (int fd, int *nfd, syscall_stats_t *ss) { if (full ()) return 0; load_iov (); ssize_t n = 0; if (nfd) { if (ss) ss->n_readvfd ++; n = readvfd (fd, iov, N_REGIONS, nfd); } else if (peek && !dont_peek) { struct msghdr mh; bzero (&mh, sizeof (mh)); mh.msg_iov = (struct iovec *) iov; mh.msg_iovlen = N_REGIONS; if (ss) ss->n_recvmsg ++; n = recvmsg (fd, &mh, MSG_PEEK); } else { if (ss) ss->n_readv ++; n = readv (fd, iov, N_REGIONS); } if (n > 0) { account_for_new_bytes (n); } return n; }
ssize_t readfd (int fd, void *buf, size_t len, int *rfdp) { struct iovec iov[1]; iov->iov_base = buf; iov->iov_len = len; return readvfd (fd, iov, 1, rfdp); }
ssize_t readfd(int fd, int *rfdp) { char readbuf[128]; size_t len = sizeof(readbuf); struct iovec iov[1]; iov->iov_base = readbuf; iov->iov_len = len; return readvfd(fd, iov, 1, rfdp); }