Call poll() only when it's needed in fd_{read,write}_all()
This commit is contained in:
20
glorytun.c
20
glorytun.c
@@ -269,15 +269,17 @@ 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)
|
||||
done += ret;
|
||||
if (ret<0) {
|
||||
poll(&pollfd, 1, -1);
|
||||
continue;
|
||||
}
|
||||
|
||||
done += ret;
|
||||
}
|
||||
|
||||
return done;
|
||||
@@ -293,15 +295,17 @@ 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)
|
||||
done += ret;
|
||||
if (ret<0) {
|
||||
poll(&pollfd, 1, -1);
|
||||
continue;
|
||||
}
|
||||
|
||||
done += ret;
|
||||
}
|
||||
|
||||
return done;
|
||||
|
||||
Reference in New Issue
Block a user