| Index: native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc b/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
|
| index f9171e29a6c0af2145a3864f6fc3fd618ec933e2..127bfecc57d35754973113222d46c633667f525a 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
|
| @@ -1014,7 +1014,6 @@ int KernelProxy::poll(struct pollfd *fds, nfds_t nfds, int timeout) {
|
| }
|
|
|
|
|
| -
|
| // Socket Functions
|
| int KernelProxy::accept(int fd, struct sockaddr* addr, socklen_t* len) {
|
| if (NULL == addr || NULL == len) {
|
| @@ -1111,10 +1110,10 @@ int KernelProxy::getsockname(int fd, struct sockaddr* addr, socklen_t* len) {
|
| }
|
|
|
| int KernelProxy::getsockopt(int fd,
|
| - int lvl,
|
| - int optname,
|
| - void* optval,
|
| - socklen_t* len) {
|
| + int lvl,
|
| + int optname,
|
| + void* optval,
|
| + socklen_t* len) {
|
| if (NULL == optval || NULL == len) {
|
| errno = EFAULT;
|
| return -1;
|
| @@ -1124,8 +1123,13 @@ int KernelProxy::getsockopt(int fd,
|
| if (AcquireSocketHandle(fd, &handle) == -1)
|
| return -1;
|
|
|
| - errno = EINVAL;
|
| - return -1;
|
| + Error err = handle->socket_node()->GetSockOpt(lvl, optname, optval, len);
|
| + if (err != 0) {
|
| + errno = err;
|
| + return -1;
|
| + }
|
| +
|
| + return 0;
|
| }
|
|
|
| int KernelProxy::listen(int fd, int backlog) {
|
| @@ -1289,8 +1293,13 @@ int KernelProxy::setsockopt(int fd,
|
| if (AcquireSocketHandle(fd, &handle) == -1)
|
| return -1;
|
|
|
| - errno = EINVAL;
|
| - return -1;
|
| + Error err = handle->socket_node()->SetSockOpt(lvl, optname, optval, len);
|
| + if (err != 0) {
|
| + errno = err;
|
| + return -1;
|
| + }
|
| +
|
| + return 0;
|
| }
|
|
|
| int KernelProxy::shutdown(int fd, int how) {
|
| @@ -1329,13 +1338,14 @@ int KernelProxy::socket(int domain, int type, int protocol) {
|
| }
|
|
|
| ScopedMountNode node(sock);
|
| - if (sock->Init(S_IREAD | S_IWRITE) == 0) {
|
| - ScopedKernelHandle handle(new KernelHandle(stream_mount_, node));
|
| - return AllocateFD(handle);
|
| + Error rtn = sock->Init(S_IREAD | S_IWRITE);
|
| + if (rtn != 0) {
|
| + errno = rtn;
|
| + return -1;
|
| }
|
|
|
| - // If we failed to init, assume we don't have access.
|
| - return EACCES;
|
| + ScopedKernelHandle handle(new KernelHandle(stream_mount_, node));
|
| + return AllocateFD(handle);
|
| }
|
|
|
| int KernelProxy::socketpair(int domain, int type, int protocol, int* sv) {
|
|
|