UdpReceiver: work in progress
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user