You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mp...@apache.org on 2016/04/26 00:18:33 UTC
[3/4] mesos git commit: Windows: Used `sendfile` with the typed error
state of `Try`.
Windows: Used `sendfile` with the typed error state of `Try`.
Review: https://reviews.apache.org/r/46285/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a10237a7
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a10237a7
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a10237a7
Branch: refs/heads/master
Commit: a10237a7d53320bf3a717fe310aec4de54015f36
Parents: 4e352e4
Author: Daniel Pravat <dp...@outlook.com>
Authored: Thu Apr 21 22:55:27 2016 -0700
Committer: Michael Park <mp...@apache.org>
Committed: Mon Apr 25 14:34:16 2016 -0700
----------------------------------------------------------------------
3rdparty/libprocess/src/poll_socket.cpp | 36 +++++++++++++---------------
1 file changed, 16 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/a10237a7/3rdparty/libprocess/src/poll_socket.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/poll_socket.cpp b/3rdparty/libprocess/src/poll_socket.cpp
index f6abc73..e68c783 100644
--- a/3rdparty/libprocess/src/poll_socket.cpp
+++ b/3rdparty/libprocess/src/poll_socket.cpp
@@ -209,33 +209,29 @@ Future<size_t> socket_send_file(int s, int fd, off_t offset, size_t size)
CHECK(size > 0);
while (true) {
- ssize_t length = os::sendfile(s, fd, offset, size);
+ Try<ssize_t, SocketError> length = os::sendfile(s, fd, offset, size);
- if (length < 0 && (errno == EINTR)) {
+ if (length.isSome()) {
+ CHECK(length.get() >= 0);
+ if (length.get() == 0) {
+ // Socket closed.
+ VLOG(1) << "Socket closed while sending";
+ }
+ return length.get();
+ }
+
+ if (net::is_restartable_error(length.error().code)) {
// Interrupted, try again now.
continue;
- } else if (length < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+ } else if (net::is_retryable_error(length.error().code)) {
// Might block, try again later.
return io::poll(s, io::WRITE)
.then(lambda::bind(&internal::socket_send_file, s, fd, offset, size));
- } else if (length <= 0) {
- // Socket error or closed.
- if (length < 0) {
- const string error = os::strerror(errno);
- VLOG(1) << "Socket error while sending: " << error;
- } else {
- VLOG(1) << "Socket closed while sending";
- }
- if (length == 0) {
- return length;
- } else {
- return Failure(ErrnoError("Socket sendfile failed"));
- }
} else {
- CHECK(length > 0);
-
- return length;
- }
+ // Socket error or closed.
+ VLOG(1) << length.error().message;
+ return Failure(length.error());
+ };
}
}