|
|
|
@ -60,7 +60,7 @@ int readv_blocking(int fd, iovec *iov, int iovcnt)
|
|
|
|
|
int done = 0;
|
|
|
|
|
while (v < iovcnt)
|
|
|
|
|
{
|
|
|
|
|
ssize_t r = readv(fd, iov, iovcnt);
|
|
|
|
|
ssize_t r = readv(fd, iov+v, iovcnt-v);
|
|
|
|
|
if (r < 0)
|
|
|
|
|
{
|
|
|
|
|
if (errno != EAGAIN && errno != EPIPE)
|
|
|
|
@ -70,6 +70,7 @@ int readv_blocking(int fd, iovec *iov, int iovcnt)
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
done += r;
|
|
|
|
|
while (v < iovcnt)
|
|
|
|
|
{
|
|
|
|
|
if (iov[v].iov_len > r)
|
|
|
|
@ -80,10 +81,10 @@ int readv_blocking(int fd, iovec *iov, int iovcnt)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
r -= iov[v].iov_len;
|
|
|
|
|
v++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
done += r;
|
|
|
|
|
}
|
|
|
|
|
return done;
|
|
|
|
|
}
|
|
|
|
@ -94,7 +95,7 @@ int writev_blocking(int fd, iovec *iov, int iovcnt)
|
|
|
|
|
int done = 0;
|
|
|
|
|
while (v < iovcnt)
|
|
|
|
|
{
|
|
|
|
|
ssize_t r = writev(fd, iov, iovcnt);
|
|
|
|
|
ssize_t r = writev(fd, iov+v, iovcnt-v);
|
|
|
|
|
if (r < 0)
|
|
|
|
|
{
|
|
|
|
|
if (errno != EAGAIN && errno != EPIPE)
|
|
|
|
@ -104,6 +105,7 @@ int writev_blocking(int fd, iovec *iov, int iovcnt)
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
done += r;
|
|
|
|
|
while (v < iovcnt)
|
|
|
|
|
{
|
|
|
|
|
if (iov[v].iov_len > r)
|
|
|
|
@ -114,10 +116,10 @@ int writev_blocking(int fd, iovec *iov, int iovcnt)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
r -= iov[v].iov_len;
|
|
|
|
|
v++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
done += r;
|
|
|
|
|
}
|
|
|
|
|
return done;
|
|
|
|
|
}
|
|
|
|
|