// // // Copyright 2017 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // #ifndef GRPC_SRC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H #define GRPC_SRC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H #include <grpc/support/port_platform.h> #include <memory> #include "absl/container/flat_hash_map.h" #include "src/core/lib/event_engine/posix.h" #include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/resolve_address.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include "src/core/lib/iomgr/tcp_server.h" #include "src/core/lib/resource_quota/memory_quota.h" // one listening port grpc_tcp_listener; // the overall server struct grpc_tcp_server { … }; // If successful, add a listener to \a s for \a addr, set \a dsmode for the // socket, and return the \a listener. 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); // Get all addresses assigned to network interfaces on the machine and create a // listener for each. requested_port is the port to use for every listener, or 0 // to select one random port that will be used for every listener. Set *out_port // to the port selected. Return absl::OkStatus() only if all listeners were // added. grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s, unsigned port_index, int requested_port, int* out_port); // Prepare a recently-created socket for listening. grpc_error_handle grpc_tcp_server_prepare_socket( grpc_tcp_server*, int fd, const grpc_resolved_address* addr, bool so_reuseport, int* port); // Ruturn true if the platform supports ifaddrs bool grpc_tcp_server_have_ifaddrs(void); #endif // GRPC_SRC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H