dont crash input server on udp in use

master
Bel LaPointe 2023-03-22 07:17:04 -06:00
parent 9cc5983223
commit 14d06e004b
1 changed files with 12 additions and 2 deletions

View File

@ -118,12 +118,18 @@ impl InputEngine for InputEngineUDP {
let addr = "0.0.0.0:".to_string() + &self.port.to_string(); let addr = "0.0.0.0:".to_string() + &self.port.to_string();
println!("$ echo -n 'hello world' | nc -4u -w0 localhost {}", &self.port.to_string()); println!("$ echo -n 'hello world' | nc -4u -w0 localhost {}", &self.port.to_string());
if self.last_socket.is_none() { if self.last_socket.is_none() {
self.last_socket = Some(std::net::UdpSocket::bind(addr).unwrap()); let result = std::net::UdpSocket::bind(&addr);
if result.is_err() {
println!("InputEngineUDP: failed to bind to {}: {:?}", &addr, result.err());
return Vec::<char>::new();
}
self.last_socket = Some(result.unwrap());
} }
let mut buf = [0; 128]; let mut buf = [0; 128];
let result = self.last_socket.as_ref().unwrap().recv_from(&mut buf); let result = self.last_socket.as_ref().unwrap().recv_from(&mut buf);
if result.is_err() { if result.is_err() {
println!("InputEngineUDP: failed to recv: {:?}", result.err());
self.last_socket = None; self.last_socket = None;
return Vec::<char>::new(); return Vec::<char>::new();
} }
@ -241,10 +247,13 @@ impl OutputEngine for OutputEngineUDP {
if self.last_socket.is_none() { if self.last_socket.is_none() {
let result = std::net::UdpSocket::bind("127.0.0.1:".to_string() + &(self.port+10).to_string()); let result = std::net::UdpSocket::bind("127.0.0.1:".to_string() + &(self.port+10).to_string());
if result.is_err() { if result.is_err() {
println!("OutputEngineUDP: failed to bind to 127.0.0.1:{}: {:?}", &(self.port+10).to_string(), result.err());
return; return;
} }
self.last_socket = Some(result.unwrap()); self.last_socket = Some(result.unwrap());
if self.last_socket.as_ref().unwrap().connect(self.host.to_string() + ":" + &self.port.to_string()).is_err() { let result = self.last_socket.as_ref().unwrap().connect(self.host.to_string() + ":" + &self.port.to_string());
if result.is_err() {
println!("OutputEngineUDP: failed to connect to {}:{}: {:?}", self.host.to_string(), self.port.to_string(), result.err());
self.last_socket = None; self.last_socket = None;
return; return;
} }
@ -252,6 +261,7 @@ impl OutputEngine for OutputEngineUDP {
let result = self.last_socket.as_ref().unwrap().send(&v.iter().cloned().collect::<String>().as_bytes()); let result = self.last_socket.as_ref().unwrap().send(&v.iter().cloned().collect::<String>().as_bytes());
if result.is_err() { if result.is_err() {
println!("OutputEngineUDP: failed to send: {:?}", result.err());
self.last_socket = None; self.last_socket = None;
} }
} }