Go to the documentation of this file.
23 #ifdef GRPC_POSIX_SOCKET_TCP_CLIENT
26 #include <netinet/in.h>
28 #include <sys/socket.h>
47 static int g_connections_complete = 0;
55 static void finish_connection() {
57 g_connections_complete++;
69 "must_succeed called"));
71 g_connecting =
nullptr;
84 struct sockaddr_in*
addr =
85 reinterpret_cast<struct sockaddr_in*
>(resolved_addr.
addr);
88 int connections_complete_before;
92 memset(&resolved_addr, 0,
sizeof(resolved_addr));
93 resolved_addr.
len =
static_cast<socklen_t
>(
sizeof(
struct sockaddr_in));
94 addr->sin_family = AF_INET;
97 svr_fd =
socket(AF_INET, SOCK_STREAM, 0);
100 0 == bind(svr_fd, (
struct sockaddr*)
addr, (socklen_t)resolved_addr.
len));
104 connections_complete_before = g_connections_complete;
109 (socklen_t*)&resolved_addr.
len) == 0);
116 &
done, &g_connecting, g_pollset_set,
args, &resolved_addr,
121 resolved_addr.
len =
static_cast<socklen_t
>(
sizeof(
addr));
122 r = accept(svr_fd,
reinterpret_cast<struct sockaddr*
>(
addr),
123 reinterpret_cast<socklen_t*
>(&resolved_addr.
len));
124 }
while (
r == -1 && errno == EINTR);
130 while (g_connections_complete == connections_complete_before) {
153 struct sockaddr_in*
addr =
154 reinterpret_cast<struct sockaddr_in*
>(resolved_addr.
addr);
155 int connections_complete_before;
159 memset(&resolved_addr, 0,
sizeof(resolved_addr));
160 resolved_addr.
len =
static_cast<socklen_t
>(
sizeof(
struct sockaddr_in));
161 addr->sin_family = AF_INET;
164 connections_complete_before = g_connections_complete;
170 &
done, &g_connecting, g_pollset_set,
nullptr, &resolved_addr,
175 while (g_connections_complete == connections_complete_before) {
203 void test_connect_cancellation_succeeds(
void) {
204 gpr_log(
GPR_ERROR,
"---- starting test_connect_cancellation_succeeds() ----");
206 struct sockaddr_in*
addr =
207 reinterpret_cast<struct sockaddr_in*
>(resolved_addr.
addr);
212 memset(&resolved_addr, 0,
sizeof(resolved_addr));
213 resolved_addr.
len =
static_cast<socklen_t
>(
sizeof(
struct sockaddr_in));
214 addr->sin_family = AF_INET;
217 svr_fd =
socket(AF_INET, SOCK_STREAM, 0);
220 0 == bind(svr_fd, (
struct sockaddr*)
addr, (socklen_t)resolved_addr.
len));
226 (socklen_t*)&resolved_addr.
len) == 0);
233 &
done, &g_connecting, g_pollset_set,
args, &resolved_addr,
239 gpr_log(
GPR_ERROR,
"---- finished test_connect_cancellation_succeeds() ----");
242 void test_fails_bad_addr_no_leak(
void) {
245 struct sockaddr_in*
addr =
246 reinterpret_cast<struct sockaddr_in*
>(resolved_addr.
addr);
247 int connections_complete_before;
250 memset(&resolved_addr, 0,
sizeof(resolved_addr));
251 resolved_addr.
len =
static_cast<socklen_t
>(
sizeof(
struct sockaddr_in));
253 addr->sin_family = AF_IPX;
255 connections_complete_before = g_connections_complete;
262 while (g_connections_complete == connections_complete_before) {
289 int main(
int argc,
char** argv) {
302 test_connect_cancellation_succeeds();
304 test_fails_bad_addr_no_leak();
307 grpc_schedule_on_exec_ctx);
318 int main(
int argc,
char** argv) {
return 1; }
struct grpc_pollset_worker grpc_pollset_worker
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
size_t grpc_pollset_size(void)
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
return memset(p, 0, total)
@ GRPC_TIMERS_NOT_CHECKED
struct grpc_pollset_set grpc_pollset_set
grpc_pollset_set * grpc_pollset_set_create()
GPRAPI void gpr_free(void *ptr)
grpc_error_handle grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker **worker, grpc_core::Timestamp deadline)
#define GRPC_LOG_IF_ERROR(what, error)
int64_t grpc_tcp_client_connect(grpc_closure *on_connect, grpc_endpoint **endpoint, grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args, const grpc_resolved_address *addr, grpc_core::Timestamp deadline)
grpc_timer_check_result grpc_timer_check(grpc_core::Timestamp *next)
static grpc_pollset * g_pollset
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu)
GPRAPI void * gpr_zalloc(size_t size)
static const CoreConfiguration & Get()
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
void grpc_pollset_set_destroy(grpc_pollset_set *pollset_set)
const grpc_channel_args * ToC() const
void grpc_channel_args_destroy(grpc_channel_args *a)
int main(int argc, char **argv)
GPRAPI void gpr_mu_lock(gpr_mu *mu)
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
@ GRPC_TIMERS_CHECKED_AND_EMPTY
void grpc_endpoint_destroy(grpc_endpoint *ep)
grpc_error_handle grpc_pollset_kick(grpc_pollset *pollset, grpc_pollset_worker *specific_worker)
const ChannelArgsPreconditioning & channel_args_preconditioning() const
static constexpr Timestamp ProcessEpoch()
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
static void destroy_pollset(void *p, grpc_error_handle)
static void test_succeeds(grpc_core::ResolverFactory *factory, const char *string)
static void test_fails(grpc_core::ResolverFactory *factory, const char *string)
grpc_core::ExecCtx exec_ctx
def listen(endpoint, test_case)
void grpc_pollset_shutdown(grpc_pollset *pollset, grpc_closure *closure)
static constexpr Timestamp InfFuture()
GRPCAPI void grpc_init(void)
static Timestamp FromTimespecRoundUp(gpr_timespec t)
static gpr_timespec test_deadline(void)
#define ABSL_FALLTHROUGH_INTENDED
void grpc_pollset_destroy(grpc_pollset *pollset)
void grpc_pollset_set_add_pollset(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
char addr[GRPC_MAX_SOCKADDR_SIZE]
GRPCAPI void grpc_shutdown(void)
ChannelArgs PreconditionChannelArgs(const grpc_channel_args *args) const
bool grpc_tcp_client_cancel_connect(int64_t connection_handle)
#define GRPC_ERROR_IS_NONE(err)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:29