From 210b566437cfaf9b5ddeaebe8efddcf456285638 Mon Sep 17 00:00:00 2001 From: Christopher Dykes Date: Mon, 31 Oct 2016 11:59:37 -0700 Subject: [PATCH] In the portability implementation of sendmsg return a partial message send if it would block Summary: If multiple iovs are passed to sendmsg, sendmsg is supposed to return the number of bytes sent if it would block, but only if the number of bytes sent is greater than 0. Reviewed By: yfeldblum Differential Revision: D4099691 fbshipit-source-id: e58fa71604966129b1fbd418c24b1bf012060428 --- folly/portability/Sockets.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/folly/portability/Sockets.cpp b/folly/portability/Sockets.cpp index 14f31fd0..5af38750 100755 --- a/folly/portability/Sockets.cpp +++ b/folly/portability/Sockets.cpp @@ -338,6 +338,10 @@ ssize_t sendmsg(int s, const struct msghdr* message, int fl) { message->msg_flags); } if (r == -1 || r != message->msg_iov[i].iov_len) { + errno = translate_wsa_error(WSAGetLastError()); + if (WSAGetLastError() == WSAEWOULDBLOCK && bytesSent > 0) { + return bytesSent; + } return -1; } bytesSent += r; -- 2.34.1