Skip to content
Snippets Groups Projects
Commit 36969385 authored by Yuchen Zeng's avatar Yuchen Zeng
Browse files

Group the port picking functions

parent 32c0153f
No related branches found
No related tags found
No related merge requests found
......@@ -105,8 +105,27 @@ static void grpc_recycle_unused_port_impl(int port) {
GPR_ASSERT(free_chosen_port(port));
}
int (*grpc_pick_unused_port)(void) = grpc_pick_unused_port_impl;
int (*grpc_pick_unused_port_or_die)(void) = grpc_pick_unused_port_or_die_impl;
void (*grpc_recycle_unused_port)(int port) = grpc_recycle_unused_port_impl;
static grpc_pick_port_functions g_pick_port_functions = {
grpc_pick_unused_port_impl, grpc_pick_unused_port_or_die_impl,
grpc_recycle_unused_port_impl};
int grpc_pick_unused_port(void) {
return g_pick_port_functions.pick_unused_port_fn();
}
int grpc_pick_unused_port_or_die(void) {
return g_pick_port_functions.pick_unused_port_or_die_fn();
}
void grpc_recycle_unused_port(int port) {
g_pick_port_functions.recycle_unused_port_fn(port);
}
void grpc_set_pick_port_functions(grpc_pick_port_functions functions) {
GPR_ASSERT(functions.pick_unused_port_fn != NULL);
GPR_ASSERT(functions.pick_unused_port_or_die_fn != NULL);
GPR_ASSERT(functions.recycle_unused_port_fn != NULL);
g_pick_port_functions = functions;
}
#endif /* GRPC_TEST_PICK_PORT */
......@@ -23,18 +23,27 @@
extern "C" {
#endif
typedef struct grpc_pick_port_functions {
int (*pick_unused_port_fn)(void);
int (*pick_unused_port_or_die_fn)(void);
void (*recycle_unused_port_fn)(int port);
} grpc_pick_port_functions;
/* pick a port number that is currently unused by either tcp or udp. return
0 on failure. */
extern int (*grpc_pick_unused_port)(void);
int grpc_pick_unused_port(void);
/* pick a port number that is currently unused by either tcp or udp. abort
on failure. */
extern int (*grpc_pick_unused_port_or_die)(void);
int grpc_pick_unused_port_or_die(void);
/* Return a port which was previously returned by grpc_pick_unused_port().
* Implementations of grpc_pick_unused_port() backed by a portserver may limit
* the total number of ports available; this lets a binary return its allocated
* ports back to the server if it is going to allocate a large number. */
extern void (*grpc_recycle_unused_port)(int port);
void grpc_recycle_unused_port(int port);
/** Request the family of pick_port functions in \a functions be used. */
void grpc_set_pick_port_functions(grpc_pick_port_functions functions);
#ifdef __cplusplus
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment