Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: mojo/shell/domain_socket/socket_libevent.cc

Issue 670773004: Update socket_libevent.cc to build on android (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/shell/domain_socket/socket_libevent.h" 5 #include "mojo/shell/domain_socket/socket_libevent.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <netinet/in.h> 9 #include <netinet/in.h>
10 #include <sys/socket.h> 10 #include <sys/socket.h>
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 return net::ERR_CONNECTION_TIMED_OUT; 56 return net::ERR_CONNECTION_TIMED_OUT;
57 default: { 57 default: {
58 int net_error = net::MapSystemError(os_error); 58 int net_error = net::MapSystemError(os_error);
59 if (net_error == net::ERR_FAILED) 59 if (net_error == net::ERR_FAILED)
60 return net::ERR_CONNECTION_FAILED; // More specific than ERR_FAILED. 60 return net::ERR_CONNECTION_FAILED; // More specific than ERR_FAILED.
61 return net_error; 61 return net_error;
62 } 62 }
63 } 63 }
64 } 64 }
65 65
66 int SetNonBlocking(int fd) {
67 int flags = fcntl(fd, F_GETFL, 0);
68 if (-1 == flags)
69 return flags;
70 return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
71 }
72
66 } // namespace 73 } // namespace
67 74
68 SocketLibevent::SocketLibevent() 75 SocketLibevent::SocketLibevent()
69 : socket_fd_(kInvalidSocket), waiting_connect_(false) { 76 : socket_fd_(kInvalidSocket), waiting_connect_(false) {
70 } 77 }
71 78
72 SocketLibevent::~SocketLibevent() { 79 SocketLibevent::~SocketLibevent() {
73 Close(); 80 Close();
74 } 81 }
75 82
76 int SocketLibevent::Open(int address_family) { 83 int SocketLibevent::Open(int address_family) {
77 DCHECK(thread_checker_.CalledOnValidThread()); 84 DCHECK(thread_checker_.CalledOnValidThread());
78 DCHECK_EQ(kInvalidSocket, socket_fd_); 85 DCHECK_EQ(kInvalidSocket, socket_fd_);
79 DCHECK(address_family == AF_INET || address_family == AF_INET6 || 86 DCHECK(address_family == AF_INET || address_family == AF_INET6 ||
80 address_family == AF_UNIX); 87 address_family == AF_UNIX);
81 88
89 int socket_type = SOCK_STREAM;
90 #ifdef SOCK_NONBLOCK
91 socket_type |= SOCK_NONBLOCK;
92 #endif
82 socket_fd_ = ::socket(address_family, 93 socket_fd_ = ::socket(address_family,
83 SOCK_STREAM | SOCK_NONBLOCK, 94 socket_type,
84 address_family == AF_UNIX ? 0 : IPPROTO_TCP); 95 address_family == AF_UNIX ? 0 : IPPROTO_TCP);
96 #ifndef SOCK_NONBLOCK
97 if (SetNonBlocking(socket_fd_) != 0) {
98 PLOG(ERROR) << "SetNonBlocking() returned an error, errno=" << errno;
99 return net::MapSystemError(errno);
100 }
101 #endif
85 if (socket_fd_ < 0) { 102 if (socket_fd_ < 0) {
86 PLOG(ERROR) << "CreatePlatformSocket() returned an error, errno=" << errno; 103 PLOG(ERROR) << "CreatePlatformSocket() returned an error, errno=" << errno;
87 return net::MapSystemError(errno); 104 return net::MapSystemError(errno);
88 } 105 }
89 106
90 return net::OK; 107 return net::OK;
91 } 108 }
92 109
93 namespace {
94 int SetNonBlocking(int fd) {
95 int flags = fcntl(fd, F_GETFL, 0);
96 if (-1 == flags)
97 return flags;
98 return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
99 }
100 } // namespace
101
102 int SocketLibevent::AdoptConnectedSocket(SocketDescriptor socket, 110 int SocketLibevent::AdoptConnectedSocket(SocketDescriptor socket,
103 const SockaddrStorage& address) { 111 const SockaddrStorage& address) {
104 DCHECK(thread_checker_.CalledOnValidThread()); 112 DCHECK(thread_checker_.CalledOnValidThread());
105 DCHECK_EQ(kInvalidSocket, socket_fd_); 113 DCHECK_EQ(kInvalidSocket, socket_fd_);
106 114
107 socket_fd_ = socket; 115 socket_fd_ = socket;
108 116
109 if (SetNonBlocking(socket_fd_)) { 117 if (SetNonBlocking(socket_fd_)) {
110 int rv = net::MapSystemError(errno); 118 int rv = net::MapSystemError(errno);
111 Close(); 119 Close();
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 accept_socket_ = NULL; 378 accept_socket_ = NULL;
371 accept_callback_.Reset(); 379 accept_callback_.Reset();
372 } 380 }
373 381
374 waiting_connect_ = false; 382 waiting_connect_ = false;
375 peer_address_.reset(); 383 peer_address_.reset();
376 } 384 }
377 385
378 } // namespace shell 386 } // namespace shell
379 } // namespace mojo 387 } // namespace mojo
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698