fix: set streams to unblocking; catch those errors
This commit is contained in:
parent
b8a56d9a2c
commit
b82ebe911c
2 changed files with 30 additions and 14 deletions
|
@ -18,5 +18,3 @@ derive_more = "0.99.17"
|
||||||
id3 = "1.5.1"
|
id3 = "1.5.1"
|
||||||
rodio = "0.16.0"
|
rodio = "0.16.0"
|
||||||
tungstenite = "0.18.0"
|
tungstenite = "0.18.0"
|
||||||
workctl = "0.2.0"
|
|
||||||
crossbeam-channel = "0.5.6"
|
|
||||||
|
|
42
src/main.rs
42
src/main.rs
|
@ -90,15 +90,21 @@ fn main() {
|
||||||
let (_stream, stream_handle) = rodio::OutputStream::try_default().unwrap();
|
let (_stream, stream_handle) = rodio::OutputStream::try_default().unwrap();
|
||||||
let mut music_player = MusicPlayer::new(test_file[0].clone(), &stream_handle);
|
let mut music_player = MusicPlayer::new(test_file[0].clone(), &stream_handle);
|
||||||
|
|
||||||
let server = TcpListener::bind("127.0.0.1:9001").unwrap();
|
let tcp_listener = TcpListener::bind("127.0.0.1:9001").unwrap();
|
||||||
|
tcp_listener.set_nonblocking(true).unwrap();
|
||||||
|
|
||||||
let mut sockets = Vec::<WebSocket<TcpStream>>::new();
|
let mut sockets = Vec::<WebSocket<TcpStream>>::new();
|
||||||
println!("Listening on {}", server.local_addr().unwrap());
|
println!("Listening on {}", tcp_listener.local_addr().unwrap());
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
if let Ok((stream, addr)) = server.accept() {
|
if let Ok((stream, addr)) = tcp_listener.accept() {
|
||||||
|
stream.set_nonblocking(true).unwrap();
|
||||||
println!("New socket connected from: {}", addr);
|
println!("New socket connected from: {}", addr);
|
||||||
//TODO: handle this error
|
|
||||||
sockets.push(accept(stream).unwrap());
|
match accept(stream) {
|
||||||
|
Ok(sck) => sockets.push(sck),
|
||||||
|
Err(_) => continue,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if sockets.len() == 0 {
|
if sockets.len() == 0 {
|
||||||
|
@ -107,7 +113,6 @@ fn main() {
|
||||||
|
|
||||||
// Need to get an asynchronous socket reader like tokio
|
// Need to get an asynchronous socket reader like tokio
|
||||||
for i in 0..sockets.len() {
|
for i in 0..sockets.len() {
|
||||||
println!("{}", sockets.len());
|
|
||||||
match sockets[i].read_message() {
|
match sockets[i].read_message() {
|
||||||
Ok(mess) => {
|
Ok(mess) => {
|
||||||
if mess.is_text() {
|
if mess.is_text() {
|
||||||
|
@ -126,13 +131,26 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(error) => {
|
Err(error) => match error {
|
||||||
if error.to_string().starts_with("Connection closed normally") {
|
tungstenite::Error::ConnectionClosed => {
|
||||||
sockets.remove(i);
|
println!("dropping socket");
|
||||||
} else {
|
let tmp = sockets.remove(i);
|
||||||
println!("a socket errored: {}", error.to_string());
|
drop(tmp);
|
||||||
}
|
}
|
||||||
}
|
tungstenite::Error::Io(_) => {
|
||||||
|
if error.to_string().ends_with("(os error 32)") {
|
||||||
|
sockets.remove(i);
|
||||||
|
} else if error.to_string().ends_with("(os error 11)") {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
println!("There was an IO error: {}", error.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
//panic!();
|
||||||
|
//continue;
|
||||||
|
}
|
||||||
|
_ => println!("A socket errored: {}", error.to_string()),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue