diff --git a/src/conf.c b/src/conf.c index 3c17ecb11..349456d35 100644 --- a/src/conf.c +++ b/src/conf.c @@ -208,7 +208,7 @@ static const struct confparams frontend_cfg_params[] = { TOK_MULTICAST_CMD_PORT, "multicast_cmd_port", "Multicast command server UDP port", "Multicast data UDP port for sending commands to rig", - "4532", RIG_CONF_NUMERIC, { .n = { 0, 1000000, 1 } } + "4531", RIG_CONF_NUMERIC, { .n = { 0, 1000000, 1 } } }, { RIG_CONF_END, NULL, } diff --git a/src/network.c b/src/network.c index 3b590fb7a..877ab510a 100644 --- a/src/network.c +++ b/src/network.c @@ -996,8 +996,6 @@ void *multicast_receiver(void *arg) rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): Starting multicast receiver\n", __FILE__, __LINE__); -// Not working right now -#if 0 int optval = 1; if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) { @@ -1005,11 +1003,25 @@ void *multicast_receiver(void *arg) strerror(errno)); return NULL; } + +#if defined(SO_REUSEPORT) + // Windows does not have SO_REUSEPORT. However, SO_REUSEADDR works in a similar way. + if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)) < 0) + { + rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP port reuse: %s\n", __func__, + strerror(errno)); + return NULL; + } #endif memset(&dest_addr, 0, sizeof(dest_addr)); dest_addr.sin_family = AF_INET; +#ifdef __MINGW32__ + // Windows cannot bind to multicast group addresses for some unknown reason + dest_addr.sin_addr.s_addr = htonl(INADDR_ANY); +#else dest_addr.sin_addr.s_addr = inet_addr(args->multicast_addr); +#endif dest_addr.sin_port = htons(args->multicast_port); if (bind(socket_fd, (struct sockaddr *) &dest_addr, sizeof(dest_addr)) < 0) @@ -1022,7 +1034,7 @@ void *multicast_receiver(void *arg) struct ip_mreq mreq; memset(&mreq, 0, sizeof(mreq)); mreq.imr_multiaddr.s_addr = inet_addr(args->multicast_addr); - mreq.imr_interface.s_addr = INADDR_ANY; + mreq.imr_interface.s_addr = htonl(INADDR_ANY); if (setsockopt(socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) { diff --git a/src/rig.c b/src/rig.c index 1165c8c70..1998ddfc6 100644 --- a/src/rig.c +++ b/src/rig.c @@ -674,7 +674,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) rs->multicast_data_addr = "224.0.0.1"; // enable multicast data publishing by default rs->multicast_data_port = 4532; rs->multicast_cmd_addr = "224.0.0.2"; // enable multicast command server by default - rs->multicast_cmd_port = 4532; + rs->multicast_cmd_port = 4531; rs->lo_freq = 0; rs->cache.timeout_ms = 500; // 500ms cache timeout by default rs->cache.ptt = 0;