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

Unified Diff: net/tools/flip_server/tcp_socket_util.cc

Issue 2169503002: Remove flip_server. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/tools/flip_server/tcp_socket_util.h ('k') | net/tools/flip_server/url_to_filename_encoder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/tools/flip_server/tcp_socket_util.cc
diff --git a/net/tools/flip_server/tcp_socket_util.cc b/net/tools/flip_server/tcp_socket_util.cc
deleted file mode 100644
index 00f9b7e59e0ad68467d9c2d683e2ed592a4a57bc..0000000000000000000000000000000000000000
--- a/net/tools/flip_server/tcp_socket_util.cc
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/tools/flip_server/tcp_socket_util.h"
-
-#include <arpa/inet.h>
-#include <errno.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "net/socket/tcp_socket.h"
-
-namespace net {
-
-namespace {
-
-// Used to ensure we delete the addrinfo structure alloc'd by getaddrinfo().
-class AddrinfoGuard {
- public:
- explicit AddrinfoGuard(struct addrinfo* addrinfo_ptr)
- : addrinfo_ptr_(addrinfo_ptr) {}
-
- ~AddrinfoGuard() { freeaddrinfo(addrinfo_ptr_); }
-
- private:
- struct addrinfo* addrinfo_ptr_;
-};
-
-// Summary:
-// Closes a socket, with option to attempt it multiple times.
-// Why do this? Well, if the system-call gets interrupted, close
-// can fail with EINTR. In that case you should just retry.. Unfortunately,
-// we can't be sure that errno is properly set since we're using a
-// multithreaded approach in the filter proxy, so we should just retry.
-// Args:
-// fd - the socket to close
-// tries - the number of tries to close the socket.
-// Returns:
-// true - if socket was closed
-// false - if socket was NOT closed.
-// Side-effects:
-// sets *fd to -1 if socket was closed.
-//
-bool CloseSocket(int* fd, int tries) {
- for (int i = 0; i < tries; ++i) {
- if (!close(*fd)) {
- *fd = -1;
- return true;
- }
- }
- return false;
-}
-
-} // namespace
-
-int CreateTCPServerSocket(const std::string& host,
- const std::string& port,
- bool is_numeric_host_address,
- int backlog,
- bool reuseaddr,
- bool reuseport,
- bool wait_for_iface,
- bool disable_nagle,
- int* listen_fd) {
- // start out by assuming things will fail.
- *listen_fd = -1;
-
- const char* node = NULL;
- const char* service = NULL;
-
- if (!host.empty())
- node = host.c_str();
- if (!port.empty())
- service = port.c_str();
-
- struct addrinfo* results = 0;
- struct addrinfo hints;
- memset(&hints, 0, sizeof(hints));
-
- if (is_numeric_host_address) {
- hints.ai_flags = AI_NUMERICHOST; // iff you know the name is numeric.
- }
- hints.ai_flags |= AI_PASSIVE;
-
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_STREAM;
-
- int err = 0;
- if ((err = getaddrinfo(node, service, &hints, &results))) {
- // gai_strerror -is- threadsafe, so we get to use it here.
- LOG(ERROR) << "getaddrinfo "
- << " for (" << host << ":" << port << ") " << gai_strerror(err)
- << "\n";
- return -1;
- }
- // this will delete the addrinfo memory when we return from this function.
- AddrinfoGuard addrinfo_guard(results);
-
- int sock =
- socket(results->ai_family, results->ai_socktype, results->ai_protocol);
- if (sock == -1) {
- LOG(ERROR) << "Unable to create socket for (" << host << ":" << port
- << "): " << strerror(errno) << "\n";
- return -1;
- }
-
- if (reuseaddr) {
- // set SO_REUSEADDR on the listening socket.
- int on = 1;
- int rc;
- rc = setsockopt(sock,
- SOL_SOCKET,
- SO_REUSEADDR,
- reinterpret_cast<char*>(&on),
- sizeof(on));
- if (rc < 0) {
- close(sock);
- LOG(FATAL) << "setsockopt() failed fd=" << listen_fd << "\n";
- }
- }
-#ifndef SO_REUSEPORT
-#define SO_REUSEPORT 15
-#endif
- if (reuseport) {
- // set SO_REUSEPORT on the listening socket.
- int on = 1;
- int rc;
- rc = setsockopt(sock,
- SOL_SOCKET,
- SO_REUSEPORT,
- reinterpret_cast<char*>(&on),
- sizeof(on));
- if (rc < 0) {
- close(sock);
- LOG(FATAL) << "setsockopt() failed fd=" << listen_fd << "\n";
- }
- }
-
- if (bind(sock, results->ai_addr, results->ai_addrlen)) {
- // If we are waiting for the interface to be raised, such as in an
- // HA environment, ignore reporting any errors.
- int saved_errno = errno;
- if (!wait_for_iface || errno != EADDRNOTAVAIL) {
- LOG(ERROR) << "Bind was unsuccessful for (" << host << ":" << port
- << "): " << strerror(errno) << "\n";
- }
- // if we knew that we were not multithreaded, we could do the following:
- // " : " << strerror(errno) << "\n";
- if (CloseSocket(&sock, 100)) {
- if (saved_errno == EADDRNOTAVAIL) {
- return -3;
- }
- return -2;
- } else {
- // couldn't even close the dang socket?!
- LOG(ERROR) << "Unable to close the socket.. Considering this a fatal "
- "error, and exiting\n";
- exit(EXIT_FAILURE);
- return -1;
- }
- }
-
- if (disable_nagle) {
- if (!SetTCPNoDelay(sock, /*no_delay=*/true)) {
- close(sock);
- LOG(FATAL) << "SetTCPNoDelay() failed on fd: " << sock;
- return -1;
- }
- }
-
- if (listen(sock, backlog)) {
- // listen was unsuccessful.
- LOG(ERROR) << "Listen was unsuccessful for (" << host << ":" << port
- << "): " << strerror(errno) << "\n";
- // if we knew that we were not multithreaded, we could do the following:
- // " : " << strerror(errno) << "\n";
-
- if (CloseSocket(&sock, 100)) {
- sock = -1;
- return -1;
- } else {
- // couldn't even close the dang socket?!
- LOG(FATAL) << "Unable to close the socket.. Considering this a fatal "
- "error, and exiting\n";
- }
- }
-
- // If we've gotten to here, Yeay! Success!
- *listen_fd = sock;
-
- return 0;
-}
-
-int CreateTCPClientSocket(const std::string& host,
- const std::string& port,
- bool is_numeric_host_address,
- bool disable_nagle,
- int* connect_fd) {
- const char* node = NULL;
- const char* service = NULL;
-
- *connect_fd = -1;
- if (!host.empty())
- node = host.c_str();
- if (!port.empty())
- service = port.c_str();
-
- struct addrinfo* results = 0;
- struct addrinfo hints;
- memset(&hints, 0, sizeof(hints));
-
- if (is_numeric_host_address)
- hints.ai_flags = AI_NUMERICHOST; // iff you know the name is numeric.
- hints.ai_flags |= AI_PASSIVE;
-
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_STREAM;
-
- int err = 0;
- if ((err = getaddrinfo(node, service, &hints, &results))) {
- // gai_strerror -is- threadsafe, so we get to use it here.
- LOG(ERROR) << "getaddrinfo for (" << node << ":" << service
- << "): " << gai_strerror(err);
- return -1;
- }
- // this will delete the addrinfo memory when we return from this function.
- AddrinfoGuard addrinfo_guard(results);
-
- int sock =
- socket(results->ai_family, results->ai_socktype, results->ai_protocol);
- if (sock == -1) {
- LOG(ERROR) << "Unable to create socket for (" << node << ":" << service
- << "): " << strerror(errno);
- return -1;
- }
-
- if (!base::SetNonBlocking(sock)) {
- LOG(FATAL) << "base::SetNonBlocking failed: " << sock;
- }
-
- if (disable_nagle) {
- if (!SetTCPNoDelay(sock, /*no_delay=*/true)) {
- close(sock);
- LOG(FATAL) << "SetTCPNoDelay() failed on fd: " << sock;
- return -1;
- }
- }
-
- int ret_val = 0;
- if (connect(sock, results->ai_addr, results->ai_addrlen)) {
- if (errno != EINPROGRESS) {
- LOG(ERROR) << "Connect was unsuccessful for (" << node << ":" << service
- << "): " << strerror(errno);
- close(sock);
- return -1;
- }
- } else {
- ret_val = 1;
- }
-
- // If we've gotten to here, Yeay! Success!
- *connect_fd = sock;
-
- return ret_val;
-}
-
-} // namespace net
« no previous file with comments | « net/tools/flip_server/tcp_socket_util.h ('k') | net/tools/flip_server/url_to_filename_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698