Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}