UdpReceiver: work in progress

This commit is contained in:
2023-04-06 18:32:08 +02:00
parent d9fcffcdc0
commit 4e8992802b
+6 -6
View File
@@ -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");
}