diff options
author | felipeg@chromium.org <felipeg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-27 00:08:47 +0000 |
---|---|---|
committer | felipeg@chromium.org <felipeg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-27 00:08:47 +0000 |
commit | 5cdd503e59f77c8c9e4786d6e6fac244d15c56a4 (patch) | |
tree | 49b8d30ca95649b373656e88d048ba89b7129ad6 /tools/android | |
parent | e5d9144bce403d6850ebb454842f13fb4ab7cb79 (diff) | |
download | chromium_src-5cdd503e59f77c8c9e4786d6e6fac244d15c56a4.zip chromium_src-5cdd503e59f77c8c9e4786d6e6fac244d15c56a4.tar.gz chromium_src-5cdd503e59f77c8c9e4786d6e6fac244d15c56a4.tar.bz2 |
Adapt python scripts to use the new Forwarder2
This is a DRAFT change.
I will polish it after running all the tests.
It worked for the integration tests.
BUG=
Review URL: https://chromiumcodereview.appspot.com/10957052
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158940 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/android')
-rw-r--r-- | tools/android/forwarder2/host_controller.cc | 4 | ||||
-rw-r--r-- | tools/android/forwarder2/socket.cc | 24 |
2 files changed, 18 insertions, 10 deletions
diff --git a/tools/android/forwarder2/host_controller.cc b/tools/android/forwarder2/host_controller.cc index 0507c11..98e487f 100644 --- a/tools/android/forwarder2/host_controller.cc +++ b/tools/android/forwarder2/host_controller.cc @@ -68,7 +68,9 @@ bool HostController::Connect() { return false; } // Send the command to the device start listening to the "device_forward_port" - SendCommand(command::LISTEN, device_port_, &adb_control_socket_); + bool send_command_success = SendCommand( + command::LISTEN, device_port_, &adb_control_socket_); + CHECK(send_command_success); int device_port_allocated; command::Type command; if (!ReadCommand(&adb_control_socket_, &device_port_allocated, &command) || diff --git a/tools/android/forwarder2/socket.cc b/tools/android/forwarder2/socket.cc index 898afc3d..5c26a44 100644 --- a/tools/android/forwarder2/socket.cc +++ b/tools/android/forwarder2/socket.cc @@ -36,6 +36,10 @@ namespace { const int kNoTimeout = -1; const int kConnectTimeOut = 10; // Seconds. + +bool FamilyIsTCP(int family) { + return family == AF_INET || family == AF_INET6; +} } // namespace namespace forwarder2 { @@ -129,7 +133,6 @@ bool Socket::InitUnixSocket(const std::string& path, bool abstract) { abstract_ = abstract; family_ = PF_UNIX; addr_.addr_un.sun_family = family_; - if (abstract) { // Copied from net/base/unix_domain_socket_posix.cc // Convert the path given into abstract socket name. It must start with @@ -143,14 +146,12 @@ bool Socket::InitUnixSocket(const std::string& path, bool abstract) { memcpy(addr_.addr_un.sun_path, path.c_str(), path.size()); addr_len_ = sizeof(sockaddr_un); } - addr_ptr_ = reinterpret_cast<sockaddr*>(&addr_.addr_un); return InitSocketInternal(); } bool Socket::InitTcpSocket(const std::string& host, int port) { port_ = port; - if (host.empty()) { // Use localhost: INADDR_LOOPBACK family_ = AF_INET; @@ -159,8 +160,7 @@ bool Socket::InitTcpSocket(const std::string& host, int port) { } else if (!Resolve(host)) { return false; } - CHECK(family_ == AF_INET || family_ == AF_INET6) - << "Invalid socket family."; + CHECK(FamilyIsTCP(family_)) << "Invalid socket family."; if (family_ == AF_INET) { addr_.addr4.sin_port = htons(port_); addr_ptr_ = reinterpret_cast<sockaddr*>(&addr_.addr4); @@ -180,7 +180,7 @@ bool Socket::BindAndListen() { SetSocketError(); return false; } - if (port_ == 0) { + if (port_ == 0 && FamilyIsTCP(family_)) { SockAddr addr; memset(&addr, 0, sizeof(addr)); socklen_t addrlen = 0; @@ -225,19 +225,25 @@ bool Socket::Accept(Socket* new_socket) { } bool Socket::Connect() { - // Set non-block because we use select. - fcntl(socket_, F_SETFL, fcntl(socket_, F_GETFL) | O_NONBLOCK); + // Set non-block because we use select for connect. + const int flags = fcntl(socket_, F_GETFL); + DCHECK(!(flags & O_NONBLOCK)); + fcntl(socket_, F_SETFL, flags | O_NONBLOCK); errno = 0; if (HANDLE_EINTR(connect(socket_, addr_ptr_, addr_len_)) < 0 && errno != EINPROGRESS) { SetSocketError(); + PRESERVE_ERRNO_HANDLE_EINTR(fcntl(socket_, F_SETFL, flags)); return false; } // Wait for connection to complete, or receive a notification. if (!WaitForEvent(WRITE, kConnectTimeOut)) { SetSocketError(); + PRESERVE_ERRNO_HANDLE_EINTR(fcntl(socket_, F_SETFL, flags)); return false; } + // Disable non-block since our code assumes blocking semantics. + fcntl(socket_, F_SETFL, flags); return true; } @@ -271,7 +277,7 @@ bool Socket::Resolve(const std::string& host) { } int Socket::GetPort() { - if (family_ != AF_INET && family_ != AF_INET6) { + if (!FamilyIsTCP(family_)) { LOG(ERROR) << "Can't call GetPort() on an unix domain socket."; return 0; } |