Chromium Code Reviews| 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..551906cc218e173de3cd95e86bbbec741668ae76 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,26 @@ 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); |
| + return 0; |
| + } |
| + } |
| + |
|
noelallen1
2013/09/30 22:56:16
Clear last_errno_:
The SO_ERROR option obtains and
Sam Clegg
2013/10/01 00:15:49
Done.
|
| + 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 +384,4 @@ Error MountNodeSocket::GetSockName(struct sockaddr* addr, socklen_t* len) { |
| } // namespace nacl_io |
| -#endif // PROVIDES_SOCKET_API |
| +#endif // PROVIDES_SOCKET_API |