tcp_server_utils_posix.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2017 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
20 #define GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
21 
23 
29 
30 /* one listening port */
31 typedef struct grpc_tcp_listener {
32  int fd;
36  int port;
37  unsigned port_index;
38  unsigned fd_index;
42  /* sibling is a linked list of all listeners for a given port. add_port and
43  clone_port place all new listeners in the same sibling list. A member of
44  the 'sibling' list is also a member of the 'next' list. The head of each
45  sibling list has is_sibling==0, and subsequent members of sibling lists
46  have is_sibling==1. is_sibling allows separate sibling lists to be
47  identified while iterating through 'next'. */
51 
52 /* the overall server */
55  /* Called whenever accept() succeeds on a server port. */
57  void* on_accept_cb_arg = nullptr;
58 
60 
61  /* active port count: how many ports are actually still listening */
62  size_t active_ports = 0;
63  /* destroyed port count: how many ports are completely destroyed */
64  size_t destroyed_ports = 0;
65 
66  /* is this server shutting down? */
67  bool shutdown = false;
68  /* have listeners been shutdown? */
69  bool shutdown_listeners = false;
70  /* use SO_REUSEPORT */
71  bool so_reuseport = false;
72  /* expand wildcard addresses to a list of all local addresses */
73  bool expand_wildcard_addrs = false;
74 
75  /* linked list of server ports */
76  grpc_tcp_listener* head = nullptr;
77  grpc_tcp_listener* tail = nullptr;
78  unsigned nports = 0;
79 
80  /* List of closures passed to shutdown_starting_add(). */
82 
83  /* shutdown callback */
85 
86  /* all pollsets interested in new connections. The object pointed at is not
87  * owned by this struct */
88  const std::vector<grpc_pollset*>* pollsets = nullptr;
89 
90  /* next pollset to assign a channel to */
92 
93  /* channel args for this server */
95 
96  /* a handler for external connections, owned */
98 
99  /* used to create slice allocators for endpoints, owned */
101 };
102 
103 /* If successful, add a listener to \a s for \a addr, set \a dsmode for the
104  socket, and return the \a listener. */
107  unsigned port_index,
108  unsigned fd_index,
109  grpc_dualstack_mode* dsmode,
110  grpc_tcp_listener** listener);
111 
112 /* Get all addresses assigned to network interfaces on the machine and create a
113  listener for each. requested_port is the port to use for every listener, or 0
114  to select one random port that will be used for every listener. Set *out_port
115  to the port selected. Return GRPC_ERROR_NONE only if all listeners were
116  added. */
118  unsigned port_index,
119  int requested_port,
120  int* out_port);
121 
122 /* Prepare a recently-created socket for listening. */
124  grpc_tcp_server*, int fd, const grpc_resolved_address* addr,
125  bool so_reuseport, int* port);
126 /* Ruturn true if the platform supports ifaddrs */
128 
129 #endif /* GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H */
grpc_core::TcpServerFdHandler
Definition: tcp_server.h:57
grpc_tcp_listener::sibling
struct grpc_tcp_listener * sibling
Definition: tcp_server_utils_posix.h:48
grpc_tcp_server::next_pollset_to_assign
gpr_atm next_pollset_to_assign
Definition: tcp_server_utils_posix.h:91
grpc_tcp_server::on_accept_cb
grpc_tcp_server_cb on_accept_cb
Definition: tcp_server_utils_posix.h:56
resolve_address.h
grpc_tcp_server::nports
unsigned nports
Definition: tcp_server_utils_posix.h:78
grpc_resolved_address
Definition: resolved_address.h:34
grpc_tcp_server
Definition: tcp_server_utils_posix.h:53
grpc_tcp_listener::server
grpc_tcp_server * server
Definition: tcp_server_utils_posix.h:34
grpc_channel_args
Definition: grpc_types.h:132
grpc_tcp_listener::next
struct grpc_tcp_listener * next
Definition: tcp_server_utils_posix.h:41
gpr_refcount
Definition: impl/codegen/sync_generic.h:39
grpc_tcp_listener::read_closure
grpc_closure read_closure
Definition: tcp_server_utils_posix.h:39
grpc_tcp_server_cb
void(* grpc_tcp_server_cb)(void *arg, grpc_endpoint *ep, grpc_pollset *accepting_pollset, grpc_tcp_server_acceptor *acceptor)
Definition: tcp_server.h:51
grpc_tcp_server::shutdown
bool shutdown
Definition: tcp_server_utils_posix.h:67
grpc_tcp_listener::emfd
grpc_fd * emfd
Definition: tcp_server_utils_posix.h:33
grpc_tcp_server_add_addr
grpc_error_handle grpc_tcp_server_add_addr(grpc_tcp_server *s, const grpc_resolved_address *addr, unsigned port_index, unsigned fd_index, grpc_dualstack_mode *dsmode, grpc_tcp_listener **listener)
grpc_tcp_server::channel_args
grpc_channel_args * channel_args
Definition: tcp_server_utils_posix.h:94
ev_posix.h
grpc_tcp_server::shutdown_starting
grpc_closure_list shutdown_starting
Definition: tcp_server_utils_posix.h:81
grpc_fd
struct grpc_fd grpc_fd
Definition: ev_posix.h:44
grpc_tcp_server::refs
gpr_refcount refs
Definition: tcp_server_utils_posix.h:54
grpc_tcp_server_add_all_local_addrs
grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server *s, unsigned port_index, int requested_port, int *out_port)
grpc_tcp_listener::addr
grpc_resolved_address addr
Definition: tcp_server_utils_posix.h:35
grpc_tcp_server::active_ports
size_t active_ports
Definition: tcp_server_utils_posix.h:62
grpc_core::MemoryQuotaRefPtr
std::shared_ptr< MemoryQuota > MemoryQuotaRefPtr
Definition: memory_quota.h:455
grpc_tcp_server::mu
gpr_mu mu
Definition: tcp_server_utils_posix.h:59
grpc_tcp_listener
Definition: tcp_server_utils_posix.h:31
grpc_tcp_server::shutdown_listeners
bool shutdown_listeners
Definition: tcp_server_utils_posix.h:69
grpc_tcp_listener::fd
int fd
Definition: tcp_server_utils_posix.h:32
grpc_tcp_listener::fd_index
unsigned fd_index
Definition: tcp_server_utils_posix.h:38
grpc_tcp_server_have_ifaddrs
bool grpc_tcp_server_have_ifaddrs(void)
grpc_closure_list
Definition: closure.h:41
tests.unit._exit_scenarios.port
port
Definition: _exit_scenarios.py:179
grpc_tcp_listener::port_index
unsigned port_index
Definition: tcp_server_utils_posix.h:37
gpr_atm
intptr_t gpr_atm
Definition: impl/codegen/atm_gcc_atomic.h:32
grpc_tcp_listener
struct grpc_tcp_listener grpc_tcp_listener
grpc_tcp_server::on_accept_cb_arg
void * on_accept_cb_arg
Definition: tcp_server_utils_posix.h:57
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
grpc_tcp_server::head
grpc_tcp_listener * head
Definition: tcp_server_utils_posix.h:76
grpc_tcp_listener::destroyed_closure
grpc_closure destroyed_closure
Definition: tcp_server_utils_posix.h:40
grpc_tcp_server::tail
grpc_tcp_listener * tail
Definition: tcp_server_utils_posix.h:77
grpc_tcp_server_prepare_socket
grpc_error_handle grpc_tcp_server_prepare_socket(grpc_tcp_server *, int fd, const grpc_resolved_address *addr, bool so_reuseport, int *port)
socket_utils_posix.h
grpc_tcp_listener::is_sibling
int is_sibling
Definition: tcp_server_utils_posix.h:49
grpc_tcp_server::memory_quota
grpc_core::MemoryQuotaRefPtr memory_quota
Definition: tcp_server_utils_posix.h:100
grpc_dualstack_mode
grpc_dualstack_mode
Definition: socket_utils_posix.h:116
memory_quota.h
grpc_tcp_server::shutdown_complete
grpc_closure * shutdown_complete
Definition: tcp_server_utils_posix.h:84
grpc_tcp_server::destroyed_ports
size_t destroyed_ports
Definition: tcp_server_utils_posix.h:64
grpc_tcp_server::so_reuseport
bool so_reuseport
Definition: tcp_server_utils_posix.h:71
grpc_error
Definition: error_internal.h:42
grpc_tcp_server::expand_wildcard_addrs
bool expand_wildcard_addrs
Definition: tcp_server_utils_posix.h:73
grpc_tcp_server::pollsets
const std::vector< grpc_pollset * > * pollsets
Definition: tcp_server_utils_posix.h:88
tcp_server.h
grpc_tcp_server::fd_handler
grpc_core::TcpServerFdHandler * fd_handler
Definition: tcp_server_utils_posix.h:97
grpc_closure
Definition: closure.h:56
addr
struct sockaddr_in addr
Definition: libuv/docs/code/tcp-echo-server/main.c:10
grpc_tcp_listener::port
int port
Definition: tcp_server_utils_posix.h:36
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:29