Call poll() only when it's needed in fd_{read,write}_all()
This commit is contained in:
16
glorytun.c
16
glorytun.c
@@ -269,14 +269,16 @@ static ssize_t fd_read_all (int fd, void *data, size_t size)
|
||||
};
|
||||
|
||||
while (done<size) {
|
||||
poll(&pollfd, 1, -1);
|
||||
|
||||
ssize_t ret = fd_read(fd, data+done, size-done);
|
||||
|
||||
if (!ret)
|
||||
break;
|
||||
|
||||
if (ret>0)
|
||||
if (ret<0) {
|
||||
poll(&pollfd, 1, -1);
|
||||
continue;
|
||||
}
|
||||
|
||||
done += ret;
|
||||
}
|
||||
|
||||
@@ -293,14 +295,16 @@ static ssize_t fd_write_all (int fd, const void *data, size_t size)
|
||||
};
|
||||
|
||||
while (done<size) {
|
||||
poll(&pollfd, 1, -1);
|
||||
|
||||
ssize_t ret = fd_write(fd, data+done, size-done);
|
||||
|
||||
if (!ret)
|
||||
break;
|
||||
|
||||
if (ret>0)
|
||||
if (ret<0) {
|
||||
poll(&pollfd, 1, -1);
|
||||
continue;
|
||||
}
|
||||
|
||||
done += ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user