diff --git a/src/net/net.rs b/src/net/net.rs index b6995fa..f14c316 100644 --- a/src/net/net.rs +++ b/src/net/net.rs @@ -190,7 +190,7 @@ impl ServerHandle { } } - pub fn update_link_speed(&mut self) { + pub fn update_link_speed(&mut self)-> bool { if !self.link_was_up & self.phy.phy_link_up() { if let Some(speed) = self.phy.speed().map(|s| match s { PhySpeed::HalfDuplexBase10T => Speed::HalfDuplexBase10T, @@ -200,11 +200,14 @@ impl ServerHandle { }) { info!("New eth link is up. Setting detected PhySpeed: {:?}", speed); self.phy.get_miim().set_speed(speed); + self.link_was_up = self.phy.phy_link_up(); + return true; } else { debug!("Failed to detect link speed."); } } self.link_was_up = self.phy.phy_link_up(); + return false; } pub fn poll_iface(&mut self) { @@ -355,8 +358,14 @@ impl EthernetPhy { pub fn eth_poll_link_status_and_update_link_speed() -> bool { unsafe { if let Some(ref mut server_handle ) = SERVER_HANDLE { - server_handle.update_link_speed(); - return server_handle.link_was_up; + let new_link_is_up = server_handle.update_link_speed(); + if new_link_is_up { + info!("Resetting TCP Sockets"); + for_each(|socket, _| { + eth_close_socket(socket); + }); + } + return new_link_is_up; } else { panic!("eth_poll_link_status_and_update_link_speed is called before init");