Skip to content

Commit 13e2acf

Browse files
committed
fix(embedded-nal): workaround for binding to any address
Workaround-For: smoltcp-rs/smoltcp#1037
1 parent b6e1af1 commit 13e2acf

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/ariel-os-coap/src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,7 @@ pub async fn coap_run(handler: impl coap_handler::Handler + coap_handler::Report
7979

8080
info!("Starting up CoAP server");
8181

82-
// Can't that even bind to the Any address??
83-
// let local_any = "0.0.0.0:5683".parse().unwrap(); // shame
84-
let local_any = "10.42.0.61:5683".parse().unwrap(); // shame
82+
let local_any = "0.0.0.0:5683".parse().unwrap(); // shame
8583
let mut unconnected = udp_nal::UnconnectedUdp::bind_multiple(socket, local_any)
8684
.await
8785
.unwrap();

src/ariel-os-coap/src/udp_nal/mod.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,15 @@ impl<'a> ConnectedUdp<'a> {
6666
local: SocketAddr,
6767
remote: SocketAddr,
6868
) -> Result<Self, Error> {
69-
socket.bind(sockaddr_nal2smol(local)?)?;
69+
// Workaround for https://github.com/smoltcp-rs/smoltcp/issues/1037
70+
let bind_to = sockaddr_nal2smol(local)?;
71+
if bind_to.addr.is_unspecified() {
72+
defmt::info!("Binding to port {}", bind_to.port);
73+
socket.bind(bind_to.port)?;
74+
} else {
75+
defmt::info!("Binding to sockaddr {}", bind_to);
76+
socket.bind(bind_to)?;
77+
}
7078

7179
Ok(ConnectedUdp {
7280
remote: sockaddr_nal2smol(remote)?,
@@ -111,7 +119,13 @@ impl<'a> UnconnectedUdp<'a> {
111119
mut socket: udp::UdpSocket<'a>,
112120
local: SocketAddr,
113121
) -> Result<Self, Error> {
114-
socket.bind(sockaddr_nal2smol(local)?)?;
122+
// Workaround for https://github.com/smoltcp-rs/smoltcp/issues/1037
123+
let bind_to = sockaddr_nal2smol(local)?;
124+
if bind_to.addr.is_unspecified() {
125+
socket.bind(bind_to.port)?;
126+
} else {
127+
socket.bind(bind_to)?;
128+
}
115129

116130
Ok(UnconnectedUdp { socket })
117131
}

0 commit comments

Comments
 (0)