Go to the documentation of this file.
23 #ifdef GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON
29 #include <sys/socket.h>
33 #include "absl/strings/str_cat.h"
45 #define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
48 static int s_max_accept_queue_size;
51 static void init_max_accept_queue_size(
void) {
54 FILE* fp = fopen(
"/proc/sys/net/core/somaxconn",
"r");
57 s_max_accept_queue_size = SOMAXCONN;
60 if (fgets(
buf,
sizeof buf, fp)) {
63 if (
i > 0 &&
i <= INT_MAX &&
end && *
end ==
'\n') {
64 n =
static_cast<int>(
i);
68 s_max_accept_queue_size =
n;
70 if (s_max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) {
72 "Suspiciously small accept queue (%d) will probably lead to "
74 s_max_accept_queue_size);
78 static int get_max_accept_queue_size(
void) {
79 gpr_once_init(&s_init_max_accept_queue_size, init_max_accept_queue_size);
80 return s_max_accept_queue_size;
102 GPR_ASSERT(!
s->on_accept_cb &&
"must add ports before starting server");
106 if (
s->head ==
nullptr) {
147 return add_socket_to_server(s, fd,
addr, port_index, fd_index, listener);
153 bool so_reuseport,
int*
port) {
164 #ifdef GRPC_LINUX_ERRQUEUE
192 if (bind(fd,
reinterpret_cast<grpc_sockaddr*
>(
const_cast<char*
>(
addr->addr)),
198 if (
listen(fd, get_max_accept_queue_size()) < 0) {
203 sockname_temp.
len =
static_cast<socklen_t
>(
sizeof(
struct sockaddr_storage));
205 if (getsockname(fd,
reinterpret_cast<grpc_sockaddr*
>(sockname_temp.
addr),
206 &sockname_temp.
len) < 0) {
221 "Unable to configure socket", &
err, 1),
grpc_error_handle grpc_set_socket_reuse_addr(int fd, int reuse)
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
struct grpc_tcp_listener * sibling
std::string ToString(StatusToStringMode mode=StatusToStringMode::kDefault) const
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
grpc_error_handle grpc_set_socket_low_latency(int fd, int low_latency)
grpc_error_handle grpc_set_socket_zerocopy(int fd)
grpc_error_handle grpc_set_socket_no_sigpipe_if_possible(int fd)
GPRAPI void * gpr_malloc(size_t size)
#define GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(desc, errs, count)
@ GRPC_ERROR_INT_FD
File descriptor associated with this error.
absl::StatusOr< std::string > grpc_sockaddr_to_string(const grpc_resolved_address *resolved_addr, bool normalize)
struct grpc_tcp_listener * next
int grpc_is_unix_socket(const grpc_resolved_address *resolved_addr)
GPRAPI void gpr_once_init(gpr_once *once, void(*init_function)(void))
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)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
grpc_error_handle grpc_set_socket_cloexec(int fd, int close_on_exec)
#define GRPC_OS_ERROR(err, call_name)
create an error associated with errno!=0 (an 'operating system' error)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc_fd * grpc_fd_create(int fd, const char *name, bool track_err)
grpc_resolved_address addr
GPRAPI void gpr_mu_lock(gpr_mu *mu)
grpc_error_handle grpc_set_socket_reuse_port(int fd, int reuse)
grpc_error_handle grpc_create_dualstack_socket(const grpc_resolved_address *addr, int type, int protocol, grpc_dualstack_mode *dsmode, int *newfd)
int grpc_sockaddr_get_port(const grpc_resolved_address *resolved_addr)
ABSL_MUST_USE_RESULT bool ok() const
grpc_error_handle grpc_error_set_int(grpc_error_handle src, grpc_error_ints which, intptr_t value)
def listen(endpoint, test_case)
UniquePtr< SSL_SESSION > ret
#define GRPC_ERROR_CREATE_FROM_CPP_STRING(desc)
grpc_error_handle grpc_tcp_server_prepare_socket(grpc_tcp_server *, int fd, const grpc_resolved_address *addr, bool so_reuseport, int *port)
#define GRPC_ERROR_UNREF(err)
const T & value() const &ABSL_ATTRIBUTE_LIFETIME_BOUND
grpc_error_handle grpc_set_socket_nonblocking(int fd, int non_blocking)
grpc_error_handle grpc_set_socket_tcp_user_timeout(int fd, const grpc_channel_args *channel_args, bool is_client)
int grpc_sockaddr_is_v4mapped(const grpc_resolved_address *resolved_addr, grpc_resolved_address *resolved_addr4_out)
grpc_error_handle grpc_apply_socket_mutator_in_args(int fd, grpc_fd_usage usage, const grpc_channel_args *args)
char addr[GRPC_MAX_SOCKADDR_SIZE]
@ GRPC_FD_SERVER_LISTENER_USAGE
const Status & status() const &
#define GRPC_ERROR_IS_NONE(err)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:29