diff --git a/daemon/call.c b/daemon/call.c index 1b446bc..a5ca9a7 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2206,3 +2206,9 @@ const char *call_delete_ng(bencode_item_t *input, struct callmaster *m, bencode_ bencode_dictionary_add_string(output, "result", "ok"); return NULL; } + +void callmaster_exclude_port(struct callmaster *m, u_int16_t p) { + mutex_lock(&m->portlock); + bit_array_set(m->ports_used, p); + mutex_unlock(&m->portlock); +} diff --git a/daemon/call.h b/daemon/call.h index ba1d58e..21fad23 100644 --- a/daemon/call.h +++ b/daemon/call.h @@ -131,6 +131,7 @@ struct callmaster; struct callmaster *callmaster_new(struct poller *); void callmaster_config(struct callmaster *m, struct callmaster_config *c); +void callmaster_exclude_port(struct callmaster *m, u_int16_t p); str *call_request_tcp(char **, struct callmaster *); diff --git a/daemon/main.c b/daemon/main.c index bf58a38..e7a635d 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -423,6 +423,7 @@ void create_everything(struct main_context *ctx) { cu = NULL; if (udp_listenport) { + callmaster_exclude_port(ctx->m, udp_listenport); cu = control_udp_new(ctx->p, udp_listenp, udp_listenport, ctx->m); if (!cu) die("Failed to open UDP control connection port\n"); @@ -430,6 +431,7 @@ void create_everything(struct main_context *ctx) { cn = NULL; if (ng_listenport) { + callmaster_exclude_port(ctx->m, ng_listenport); cn = control_ng_new(ctx->p, ng_listenp, ng_listenport, ctx->m); if (!cn) die("Failed to open UDP control connection port\n");