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