From 4e8992802b7f6678780c350ad5aeba1ff8b44c9f Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 6 Apr 2023 18:32:08 +0200 Subject: [PATCH] UdpReceiver: work in progress --- receiver/host/UdpReceiver.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/receiver/host/UdpReceiver.cpp b/receiver/host/UdpReceiver.cpp index 6f47e678..0113bc26 100644 --- a/receiver/host/UdpReceiver.cpp +++ b/receiver/host/UdpReceiver.cpp @@ -45,20 +45,20 @@ uint64_t UdpReceiver::Run(uint16_t udp_port_number, ProcessJFPacket *process) { .sin_addr = { .s_addr = INADDR_ANY } - }; + }, client_addr{}; if (bind(fd, (struct sockaddr *) &server_addr, sizeof(server_addr)) <= 0) throw JFJochException(JFJochExceptionCategory::UDPError, "Cannot bind to UDP port"); char buffer[9000]; - sockaddr_storage src_addr; - socklen_t src_addr_len=sizeof(src_addr); + socklen_t src_addr_len=sizeof(client_addr); while (!cancel) { - ssize_t count = recvfrom(fd, buffer, sizeof(buffer), 0, (struct sockaddr *) &src_addr, &src_addr_len); + auto count = recvfrom(fd, buffer, sizeof(buffer), 0, (struct sockaddr *) &client_addr, &src_addr_len); + if (count == sizeof(jf_payload)) - process->ProcessPacket((jf_payload *) &buffer, src_addr); - else if ((errno != EAGAIN) && (count == -1)) + process->ProcessPacket((jf_payload *) buffer, client_addr.sin_addr.s_addr); + else if ((errno != EAGAIN) && (errno != EWOULDBLOCK) && (count == -1)) throw JFJochException(JFJochExceptionCategory::UDPError, "Cannot bind to UDP port"); }