From 70f467ed2395a7ff4831e20d9df55c6f0446c43a Mon Sep 17 00:00:00 2001 From: "F. Duncanh" Date: Sat, 2 Sep 2023 05:20:33 -0400 Subject: [PATCH] eliminate unneeded socket address returns from recvfrom --- lib/raop_ntp.c | 3 +-- lib/raop_rtp.c | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/raop_ntp.c b/lib/raop_ntp.c index 2fcded1..57cec8d 100644 --- a/lib/raop_ntp.c +++ b/lib/raop_ntp.c @@ -299,8 +299,7 @@ raop_ntp_thread(void *arg) logger_log(raop_ntp->logger, LOGGER_ERR, "raop_ntp error sending request"); } else { // Read response - response_len = recvfrom(raop_ntp->tsock, (char *)response, sizeof(response), 0, - (struct sockaddr *) &raop_ntp->remote_saddr, &raop_ntp->remote_saddr_len); + response_len = recvfrom(raop_ntp->tsock, (char *)response, sizeof(response), 0, NULL, NULL); if (response_len < 0) { timeout_counter++; char time[30]; diff --git a/lib/raop_rtp.c b/lib/raop_rtp.c index 964dfa5..51f207e 100644 --- a/lib/raop_rtp.c +++ b/lib/raop_rtp.c @@ -449,6 +449,7 @@ raop_rtp_thread_udp(void *arg) unsigned int packetlen; struct sockaddr_storage saddr; socklen_t saddrlen; + bool got_remote_control_saddr = false; /* for initial rtp to ntp conversions */ bool have_synced = false; @@ -504,12 +505,18 @@ raop_rtp_thread_udp(void *arg) } if (FD_ISSET(raop_rtp->csock, &rfds)) { - saddrlen = sizeof(saddr); - packetlen = recvfrom(raop_rtp->csock, (char *)packet, sizeof(packet), 0, - (struct sockaddr *)&saddr, &saddrlen); - - memcpy(&raop_rtp->control_saddr, &saddr, saddrlen); - raop_rtp->control_saddr_len = saddrlen; + if (got_remote_control_saddr== false) { + saddrlen = sizeof(saddr); + packetlen = recvfrom(raop_rtp->csock, (char *)packet, sizeof(packet), 0, + (struct sockaddr *)&saddr, &saddrlen); + if (packetlen > 0) { + memcpy(&raop_rtp->control_saddr, &saddr, saddrlen); + raop_rtp->control_saddr_len = saddrlen; + got_remote_control_saddr = true; + } + } else { + packetlen = recvfrom(raop_rtp->csock, (char *)packet, sizeof(packet), 0, NULL, NULL); + } int type_c = packet[1] & ~0x80; logger_log(raop_rtp->logger, LOGGER_DEBUG, "\nraop_rtp type_c 0x%02x, packetlen = %d", type_c, packetlen); @@ -611,8 +618,7 @@ raop_rtp_thread_udp(void *arg) //logger_log(raop_rtp->logger, LOGGER_INFO, "Would have data packet in queue"); // Receiving audio data here saddrlen = sizeof(saddr); - packetlen = recvfrom(raop_rtp->dsock, (char *)packet, sizeof(packet), 0, - (struct sockaddr *)&saddr, &saddrlen); + packetlen = recvfrom(raop_rtp->dsock, (char *)packet, sizeof(packet), 0, NULL, NULL); // rtp payload type //int type_d = packet[1] & ~0x80; //logger_log(raop_rtp->logger, LOGGER_DEBUG, "raop_rtp_thread_udp type_d 0x%02x, packetlen = %d", type_d, packetlen);