|
|
|
@ -109,8 +109,8 @@ struct grpc_udp_server { |
|
|
|
|
grpc_pollset **pollsets; |
|
|
|
|
/* number of pollsets in the pollsets array */ |
|
|
|
|
size_t pollset_count; |
|
|
|
|
/* The parent grpc server */ |
|
|
|
|
grpc_server *grpc_server; |
|
|
|
|
/* opaque object to pass to callbacks */ |
|
|
|
|
void *user_data; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
grpc_udp_server *grpc_udp_server_create(void) { |
|
|
|
@ -178,7 +178,7 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) { |
|
|
|
|
/* Call the orphan_cb to signal that the FD is about to be closed and
|
|
|
|
|
* should no longer be used. */ |
|
|
|
|
GPR_ASSERT(sp->orphan_cb); |
|
|
|
|
sp->orphan_cb(exec_ctx, sp->emfd); |
|
|
|
|
sp->orphan_cb(exec_ctx, sp->emfd, sp->server->user_data); |
|
|
|
|
|
|
|
|
|
grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL, |
|
|
|
|
"udp_listener_shutdown"); |
|
|
|
@ -204,7 +204,7 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s, |
|
|
|
|
if (s->active_ports) { |
|
|
|
|
for (sp = s->head; sp; sp = sp->next) { |
|
|
|
|
GPR_ASSERT(sp->orphan_cb); |
|
|
|
|
sp->orphan_cb(exec_ctx, sp->emfd); |
|
|
|
|
sp->orphan_cb(exec_ctx, sp->emfd, sp->server->user_data); |
|
|
|
|
grpc_fd_shutdown(exec_ctx, sp->emfd, |
|
|
|
|
GRPC_ERROR_CREATE("Server destroyed")); |
|
|
|
|
} |
|
|
|
@ -299,7 +299,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { |
|
|
|
|
|
|
|
|
|
/* Tell the registered callback that data is available to read. */ |
|
|
|
|
GPR_ASSERT(sp->read_cb); |
|
|
|
|
sp->read_cb(exec_ctx, sp->emfd, sp->server->grpc_server); |
|
|
|
|
sp->read_cb(exec_ctx, sp->emfd, sp->server->user_data); |
|
|
|
|
|
|
|
|
|
/* Re-arm the notification event so we get another chance to read. */ |
|
|
|
|
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure); |
|
|
|
@ -322,7 +322,7 @@ static void on_write(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { |
|
|
|
|
|
|
|
|
|
/* Tell the registered callback that the socket is writeable. */ |
|
|
|
|
GPR_ASSERT(sp->write_cb); |
|
|
|
|
sp->write_cb(exec_ctx, sp->emfd); |
|
|
|
|
sp->write_cb(exec_ctx, sp->emfd, sp->server->user_data); |
|
|
|
|
|
|
|
|
|
/* Re-arm the notification event so we get another chance to write. */ |
|
|
|
|
grpc_fd_notify_on_write(exec_ctx, sp->emfd, &sp->write_closure); |
|
|
|
@ -464,13 +464,13 @@ int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index) { |
|
|
|
|
|
|
|
|
|
void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s, |
|
|
|
|
grpc_pollset **pollsets, size_t pollset_count, |
|
|
|
|
grpc_server *server) { |
|
|
|
|
void *user_data) { |
|
|
|
|
size_t i; |
|
|
|
|
gpr_mu_lock(&s->mu); |
|
|
|
|
grpc_udp_listener *sp; |
|
|
|
|
GPR_ASSERT(s->active_ports == 0); |
|
|
|
|
s->pollsets = pollsets; |
|
|
|
|
s->grpc_server = server; |
|
|
|
|
s->user_data = user_data; |
|
|
|
|
|
|
|
|
|
sp = s->head; |
|
|
|
|
while (sp != NULL) { |
|
|
|
|