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"); }