Index: native_client_sdk/src/libraries/nacl_io/mount_node_socket.cc |
diff --git a/native_client_sdk/src/libraries/nacl_io/mount_node_socket.cc b/native_client_sdk/src/libraries/nacl_io/mount_node_socket.cc |
index abaf55ba1e9e48ae0a89fa16d08b65d87ce62962..87d6f484d3a33b5852fff6bfd09cbea7e1176386 100644 |
--- a/native_client_sdk/src/libraries/nacl_io/mount_node_socket.cc |
+++ b/native_client_sdk/src/libraries/nacl_io/mount_node_socket.cc |
@@ -204,14 +204,27 @@ Error MountNodeSocket::GetSockOpt(int lvl, |
int optname, |
void* optval, |
socklen_t* len) { |
- return EINVAL; |
+ if (lvl != SOL_SOCKET) |
+ return ENOPROTOOPT; |
+ |
+ switch (optname) { |
+ case SO_ERROR: { |
+ int copy_bytes = std::min(sizeof(int), *len); |
+ memcpy(optval, &last_errno_, copy_bytes); |
+ *len = sizeof(int); |
+ last_errno_ = 0; |
+ return 0; |
+ } |
+ } |
+ |
+ return ENOPROTOOPT; |
} |
Error MountNodeSocket::SetSockOpt(int lvl, |
int optname, |
const void* optval, |
socklen_t len) { |
- return EINVAL; |
+ return ENOPROTOOPT; |
} |
Error MountNodeSocket::Bind(const struct sockaddr* addr, socklen_t len) { |
@@ -372,4 +385,4 @@ Error MountNodeSocket::GetSockName(struct sockaddr* addr, socklen_t* len) { |
} // namespace nacl_io |
-#endif // PROVIDES_SOCKET_API |
+#endif // PROVIDES_SOCKET_API |