Make sure myport is set correctly when running with Port = 0.
[tinc] / src / net_setup.c
index 0f8d31a..c4f2127 100644 (file)
@@ -586,7 +586,7 @@ bool setup_myself_reloadable(void) {
                free(bmode);
        }
 
-       const char* const DEFAULT_BROADCAST_SUBNETS[] = { "ff:ff:ff:ff:ff:ff", "255.255.255.255", "ff00::/8" };
+       const char* const DEFAULT_BROADCAST_SUBNETS[] = { "ff:ff:ff:ff:ff:ff", "255.255.255.255", "224.0.0.0/4", "ff00::/8" };
        for (size_t i = 0; i < sizeof(DEFAULT_BROADCAST_SUBNETS) / sizeof(*DEFAULT_BROADCAST_SUBNETS); i++) {
                subnet_t *s = new_subnet();
                if (!str2net(s, DEFAULT_BROADCAST_SUBNETS[i]))
@@ -1037,7 +1037,7 @@ static bool setup_myself(void) {
 
        /* If no Port option was specified, set myport to the port used by the first listening socket. */
 
-       if(!port_specified) {
+       if(!port_specified || atoi(myport) == 0) {
                sockaddr_t sa;
                socklen_t salen = sizeof sa;
                if(!getsockname(listen_socket[0].udp.fd, &sa.sa, &salen)) {