create_listener.h revision 201ade2fbba22bfb27ae029f4d23fca6ded109a0
1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_TOOLS_FLIP_SERVER_CREATE_LISTENER_H__
6#define NET_TOOLS_FLIP_SERVER_CREATE_LISTENER_H__
7#pragma once
8
9#include <iosfwd>
10#include <string>
11
12namespace net {
13
14void SetNonBlocking(int fd);
15
16// Summary:
17//   creates a socket for listening, and bind()s and listen()s it.
18// Args:
19//   host - hostname or numeric address, or empty-string if you want
20//          to bind to listen on all addresses
21//   port - a port number or service name. By service name I mean a
22//          -real- service name, not a Google service name. I'd suggest
23//          you just stick to a numeric representation like "80"
24//   is_numeric_host_address -
25//           if you know that the host address has already been looked-up,
26//           and will be provided in numeric form like "130.207.244.244",
27//           then you can set this to true, and it will save you the time
28//           of a DNS lookup.
29//   backlog - passed into listen. This is the number of pending incoming
30//             connections a socket which is listening may have acquired before
31//             the OS starts rejecting new incoming connections.
32//   reuseaddr - if true sets SO_REUSEADDR on the listening socket
33//   reuseport - if true sets SO_REUSEPORT on the listening socket
34//   wait_for_iface - A boolean indicating that CreateListeningSocket should
35//                    block until the interface that it will bind to has been
36//                    raised. This is intended for HA environments.
37//   disable_nagle - if true sets TCP_NODELAY on the listening socket.
38//   listen_fd - this will be assigned a positive value if the socket is
39//               successfully created, else it will be assigned -1.
40int CreateListeningSocket(const std::string& host,
41                          const std::string& port,
42                          bool is_numeric_host_address,
43                          int backlog,
44                          bool reuseaddr,
45                          bool reuseport,
46                          bool wait_for_iface,
47                          bool disable_nagle,
48                          int * listen_fd);
49
50int CreateConnectedSocket(int *connect_fd,
51                          const std::string& host,
52                          const std::string& port,
53                          bool is_numeric_host_address,
54                          bool disable_nagle);
55}  // namespace net
56
57#endif  // NET_TOOLS_FLIP_SERVER_CREATE_LISTENER_H__
58
59