diff --git a/CHANGELOG.md b/CHANGELOG.md index 4be1d96..dad0d6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - Update `managed` from 0.7 to 0.8 ([442](https://github.com/smoltcp-rs/smoltcp/pull/442)) +- udp: Add `close()` method to unbind socket. ## [0.7.3] - 2021-05-29 diff --git a/src/socket/udp.rs b/src/socket/udp.rs index f62d94f..34071f0 100644 --- a/src/socket/udp.rs +++ b/src/socket/udp.rs @@ -146,6 +146,11 @@ impl<'a> UdpSocket<'a> { Ok(()) } + /// Close the socket. + pub fn close(&mut self) { + self.endpoint = IpEndpoint::default(); + } + /// Check whether the socket is open. #[inline] pub fn is_open(&self) -> bool { @@ -624,4 +629,15 @@ mod test { assert_eq!(socket.process(&remote_ip_repr(), &repr, &[]), Ok(())); assert_eq!(socket.recv(), Ok((&[][..], REMOTE_END))); } + + #[test] + fn test_closing() { + let recv_buffer = UdpSocketBuffer::new(vec![UdpPacketMetadata::EMPTY; 1], vec![]); + let mut socket = socket(recv_buffer, buffer(0)); + assert_eq!(socket.bind(LOCAL_PORT), Ok(())); + + assert!(socket.is_open()); + socket.close(); + assert!(!socket.is_open()); + } }