15c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org// Copyright (c) 2009 The Chromium Authors. All rights reserved. 25c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org// Use of this source code is governed by a BSD-style license that can be 35c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org// found in the LICENSE file. 45c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 55c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#ifndef NET_TOOLS_FLIP_SERVER_CREATE_LISTENER_H__ 65c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#define NET_TOOLS_FLIP_SERVER_CREATE_LISTENER_H__ 75c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 85c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include <iosfwd> 95c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include <string> 105c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 11923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgnamespace net { 12923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 137c1508f4449fe8184aa045737c20ba37e603dd03fgalligan@chromium.orgvoid FlipSetNonBlocking(int fd); 14d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org 15ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org// Summary: 16ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org// creates a socket for listening, and bind()s and listen()s it. 17f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org// Args: 18f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org// host - hostname or numeric address, or empty-string if you want 19ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// to bind to listen on all addresses 20ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// port - a port number or service name. By service name I mean a 21ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// -real- service name, not a Google service name. I'd suggest 225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org// you just stick to a numeric representation like "80" 23ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// is_numeric_host_address - 2447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// if you know that the host address has already been looked-up, 2547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// and will be provided in numeric form like "130.207.244.244", 2647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// then you can set this to true, and it will save you the time 2747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// of a DNS lookup. 2847265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// backlog - passed into listen. This is the number of pending incoming 2947265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// connections a socket which is listening may have acquired before 3047265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// the OS starts rejecting new incoming connections. 3147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// reuseaddr - if true sets SO_REUSEADDR on the listening socket 3247265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// reuseport - if true sets SO_REUSEPORT on the listening socket 3347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// wait_for_iface - A boolean indicating that CreateListeningSocket should 3447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// block until the interface that it will bind to has been 3547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// raised. This is intended for HA environments. 36ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// disable_nagle - if true sets TCP_NODELAY on the listening socket. 37f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org// listen_fd - this will be assigned a positive value if the socket is 3847265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org// successfully created, else it will be assigned -1. 3947265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgint CreateListeningSocket(const std::string& host, 405c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org const std::string& port, 415c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org bool is_numeric_host_address, 42923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org int backlog, 4347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org bool reuseaddr, 445c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org bool reuseport, 4547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org bool wait_for_iface, 4647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org bool disable_nagle, 4747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org int* listen_fd); 4847265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org 4947265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgint CreateConnectedSocket(int* connect_fd, 505c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org const std::string& host, 515c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org const std::string& port, 52923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org bool is_numeric_host_address, 5347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org bool disable_nagle); 545c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org} // namespace net 5595aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com 565c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#endif // NET_TOOLS_FLIP_SERVER_CREATE_LISTENER_H__ 5747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org