#include <grpc/support/port_platform.h>
#include "absl/types/optional.h"
#include "src/core/lib/iomgr/port.h"
#ifdef GRPC_POSIX_SOCKETUTILS
#include <fcntl.h>
#include <sys/socket.h>
#include <unistd.h>
#include <grpc/impl/grpc_types.h>
#include <grpc/support/log.h>
#include "src/core/lib/gprpp/crash.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/socket_utils_posix.h"
#endif
#ifdef GRPC_POSIX_SOCKET_TCP
#include "src/core/lib/event_engine/channel_args_endpoint_config.h"
#include "src/core/lib/gprpp/strerror.h"
#include "src/core/lib/iomgr/socket_utils_posix.h"
EndpointConfig;
PosixTcpOptions;
namespace {
int AdjustValue(int default_value, int min_value, int max_value,
absl::optional<int> actual_value) { … }
}
PosixTcpOptions TcpOptionsFromEndpointConfig(const EndpointConfig& config) { … }
#endif
#ifdef GRPC_POSIX_SOCKETUTILS
int grpc_accept4(int sockfd, grpc_resolved_address* resolved_addr, int nonblock,
int cloexec) {
int fd, flags;
fd = accept(sockfd, reinterpret_cast<grpc_sockaddr*>(resolved_addr->addr),
&resolved_addr->len);
if (fd >= 0) {
if (nonblock) {
flags = fcntl(fd, F_GETFL, 0);
if (flags < 0) goto close_and_error;
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != 0) goto close_and_error;
}
if (cloexec) {
flags = fcntl(fd, F_GETFD, 0);
if (flags < 0) goto close_and_error;
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) != 0) goto close_and_error;
}
}
return fd;
close_and_error:
close(fd);
return -1;
}
#endif