From 0a740168be79abb4afc82b9860b8562e3da27e08 Mon Sep 17 00:00:00 2001
From: c vw <dl1ycf@darc.de>
Date: Fri, 8 Nov 2019 17:39:27 +0100
Subject: [PATCH] Made stemlab_get_info more robust

---
 old_discovery.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/old_discovery.c b/old_discovery.c
index 4c2baca..d1c83c8 100644
--- a/old_discovery.c
+++ b/old_discovery.c
@@ -257,7 +257,10 @@ int stemlab_get_info(int id) {
   devices=id;
 
   discovery_socket = socket(AF_INET, SOCK_DGRAM, 0);
-  if (discovery_socket < 0) return(1);
+  if (discovery_socket < 0) {
+    perror("stemlab_get_info socket():");
+    return(1);
+  }
 
   optval = 1;
   setsockopt(discovery_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
@@ -266,12 +269,15 @@ int stemlab_get_info(int id) {
   memset(&discovery_addr, 0, sizeof(discovery_addr));
   discovery_addr.sin_family=AF_INET;
   discovery_addr.sin_addr.s_addr=htonl(INADDR_ANY);
-  discovery_addr.sin_port=htons(DISCOVERY_PORT);
+  // use system-assigned port in case 1024 is in use
+  // e.g. by an HPSDR simulator
+  discovery_addr.sin_port=htons(0);
   ret=bind(discovery_socket, (struct sockaddr *)&discovery_addr, sizeof(discovery_addr));
   if (ret < 0) {
     perror("stemlab_get_info bind():");
     return 1;
   }
+  setsockopt(discovery_socket, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval));
 
   // start a receive thread to collect discovery response packets
   discover_thread_id = g_thread_new( "old discover receive", discover_receive_thread, NULL);
-- 
2.45.2