Handle IO error from `peer_addr()` call (fixes #8)
Presumably, if a client disconnects immediately after connecting (maybe even while we're still busy setting up the previous one), then `peer_addr()` can return an error. This commit handles any such error by logging them. Except for the NotConnected kind which we now know are expected during normal operation.master
							parent
							
								
									69451531bd
								
							
						
					
					
						commit
						2a95f11d30
					
				
							
								
								
									
										11
									
								
								src/main.rs
								
								
								
								
							
							
						
						
									
										11
									
								
								src/main.rs
								
								
								
								
							| 
						 | 
					@ -14,6 +14,7 @@ use mumble_protocol::control::RawControlPacket;
 | 
				
			||||||
use mumble_protocol::Clientbound;
 | 
					use mumble_protocol::Clientbound;
 | 
				
			||||||
use std::convert::Into;
 | 
					use std::convert::Into;
 | 
				
			||||||
use std::convert::TryInto;
 | 
					use std::convert::TryInto;
 | 
				
			||||||
 | 
					use std::io::ErrorKind;
 | 
				
			||||||
use std::net::Ipv4Addr;
 | 
					use std::net::Ipv4Addr;
 | 
				
			||||||
use std::net::Ipv6Addr;
 | 
					use std::net::Ipv6Addr;
 | 
				
			||||||
use std::net::ToSocketAddrs;
 | 
					use std::net::ToSocketAddrs;
 | 
				
			||||||
| 
						 | 
					@ -121,7 +122,15 @@ async fn main() -> Result<(), Error> {
 | 
				
			||||||
    let mut server = TcpListener::bind(&socket_addr).await?;
 | 
					    let mut server = TcpListener::bind(&socket_addr).await?;
 | 
				
			||||||
    loop {
 | 
					    loop {
 | 
				
			||||||
        let (client, _) = server.accept().await?;
 | 
					        let (client, _) = server.accept().await?;
 | 
				
			||||||
        let addr = client.peer_addr().expect("peer to have an address");
 | 
					        let addr = match client.peer_addr() {
 | 
				
			||||||
 | 
					            Ok(addr) => addr,
 | 
				
			||||||
 | 
					            Err(err) => {
 | 
				
			||||||
 | 
					                if err.kind() != ErrorKind::NotConnected {
 | 
				
			||||||
 | 
					                    println!("Error getting address of new connection: {:?}", err);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
        println!("New connection from {}", addr);
 | 
					        println!("New connection from {}", addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Connect to server
 | 
					        // Connect to server
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue