diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mslookup/mdns_sock.c | 21 | ||||
-rw-r--r-- | src/mslookup/mslookup_client_mdns.c | 4 |
2 files changed, 13 insertions, 12 deletions
diff --git a/src/mslookup/mdns_sock.c b/src/mslookup/mdns_sock.c index 902ead83..4a964dbd 100644 --- a/src/mslookup/mdns_sock.c +++ b/src/mslookup/mdns_sock.c @@ -16,9 +16,9 @@ #include <osmocom/mslookup/mdns_sock.h> /* returns 0 on success, -1 on error */ -struct osmo_mdns_sock *osmo_mdns_sock_init(void *ctx, const char *ip, unsigned int port, bool reuse_addr, - int (*cb)(struct osmo_fd *fd, unsigned int what), - void *data, unsigned int priv_nr) +struct osmo_mdns_sock *osmo_mdns_sock_init(void *ctx, const char *ip, unsigned int port, + int (*cb)(struct osmo_fd *fd, unsigned int what), + void *data, unsigned int priv_nr) { struct osmo_mdns_sock *ret; int sock, rc; @@ -65,13 +65,14 @@ struct osmo_mdns_sock *osmo_mdns_sock_init(void *ctx, const char *ip, unsigned i goto error; } - /* Tests: client and server listen on same IP and port */ - if (reuse_addr) { - rc = setsockopt(sock,SOL_SOCKET,SO_REUSEADDR, (char *)&y, sizeof(y)); - if (rc == -1) { - LOGP(DLMSLOOKUP, LOGL_ERROR, "osmo_mdns_sock_init: setsockopt: %s\n", strerror(errno)); - goto error; - } + /* Always allow binding the same IP and port twice. This is needed in OsmoHLR (where the code becomes cleaner by + * just using a different socket for server and client code) and in the mslookup_client_mdns_test. Also for + * osmo-mslookup-client if it is running multiple times in parallel (i.e. two incoming calls almost at the same + * time need to be resolved with the simple dialplan example that just starts new processes). */ + rc = setsockopt(sock,SOL_SOCKET,SO_REUSEADDR, (char *)&y, sizeof(y)); + if (rc == -1) { + LOGP(DLMSLOOKUP, LOGL_ERROR, "osmo_mdns_sock_init: setsockopt: %s\n", strerror(errno)); + goto error; } /* Bind and register osmo_fd callback */ diff --git a/src/mslookup/mslookup_client_mdns.c b/src/mslookup/mslookup_client_mdns.c index 45bbf3d9..d61fd14e 100644 --- a/src/mslookup/mslookup_client_mdns.c +++ b/src/mslookup/mslookup_client_mdns.c @@ -146,7 +146,7 @@ static void mdns_method_destruct(struct osmo_mslookup_client_method *method) * ID, but all query parameters (service type, ID, ID type), to determine if a reply is * relevant. */ struct osmo_mslookup_client_method *osmo_mslookup_client_add_mdns(struct osmo_mslookup_client *client, const char *ip, - uint16_t port, bool reuse_addr, int initial_packet_id) + uint16_t port, int initial_packet_id) { struct osmo_mdns_method_state *state; struct osmo_mslookup_client_method *m; @@ -173,7 +173,7 @@ struct osmo_mslookup_client_method *osmo_mslookup_client_add_mdns(struct osmo_ms state->client = client; - state->mc = osmo_mdns_sock_init(state, ip, port, reuse_addr, mdns_method_recv, state, 0); + state->mc = osmo_mdns_sock_init(state, ip, port, mdns_method_recv, state, 0); if (!state->mc) goto error_cleanup; |