Index: native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc |
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc |
index 06e45e67ecd09a25036173805f9a4d986b8aaa5a..93fb7dd41d82e25c4e1ab91f58ebb87fc1270d7c 100644 |
--- a/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc |
+++ b/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc |
@@ -350,6 +350,28 @@ Error TcpNode::SetSockOpt(int lvl, |
AUTO_LOCK(node_lock_); |
tcp_nodelay_ = *static_cast<const int*>(optval) != 0; |
return SetNoDelay_Locked(); |
+ } else if (lvl == SOL_SOCKET && optname == SO_RCVBUF) { |
+ if (static_cast<size_t>(len) < sizeof(int)) |
+ return EINVAL; |
+ AUTO_LOCK(node_lock_); |
+ int bufsize = *static_cast<const int*>(optval); |
+ int32_t error = |
+ TCPInterface()->SetOption(socket_resource_, |
+ PP_TCPSOCKET_OPTION_RECV_BUFFER_SIZE, |
+ PP_MakeInt32(bufsize), |
+ PP_BlockUntilComplete()); |
+ return PPErrorToErrno(error); |
+ } else if (lvl == SOL_SOCKET && optname == SO_SNDBUF) { |
+ if (static_cast<size_t>(len) < sizeof(int)) |
+ return EINVAL; |
+ AUTO_LOCK(node_lock_); |
+ int bufsize = *static_cast<const int*>(optval); |
+ int32_t error = |
+ TCPInterface()->SetOption(socket_resource_, |
+ PP_TCPSOCKET_OPTION_SEND_BUFFER_SIZE, |
+ PP_MakeInt32(bufsize), |
+ PP_BlockUntilComplete()); |
+ return PPErrorToErrno(error); |
} |
return SocketNode::SetSockOpt(lvl, optname, optval, len); |