diff --git a/misc/core-derive/src/lib.rs b/misc/core-derive/src/lib.rs index 205d4c45..1153276f 100644 --- a/misc/core-derive/src/lib.rs +++ b/misc/core-derive/src/lib.rs @@ -271,8 +271,8 @@ fn build_struct(ast: &DeriveInput, data_struct: &DataStruct) -> TokenStream { return None } Some(match field.ident { - Some(ref i) => quote!(self.#i.inject_listener_closed(id);), - None => quote!(self.#field_n.inject_listener_closed(id);) + Some(ref i) => quote!(self.#i.inject_listener_closed(id, reason);), + None => quote!(self.#field_n.inject_listener_closed(id, reason);) }) }) }; @@ -469,7 +469,7 @@ fn build_struct(ast: &DeriveInput, data_struct: &DataStruct) -> TokenStream { #(#inject_listener_error_stmts);* } - fn inject_listener_closed(&mut self, id: #listener_id) { + fn inject_listener_closed(&mut self, id: #listener_id, reason: Result<(), &std::io::Error>) { #(#inject_listener_closed_stmts);* } diff --git a/swarm/src/behaviour.rs b/swarm/src/behaviour.rs index e7deaf75..fdddc6a0 100644 --- a/swarm/src/behaviour.rs +++ b/swarm/src/behaviour.rs @@ -146,7 +146,7 @@ pub trait NetworkBehaviour: Send + 'static { } /// A listener closed. - fn inject_listener_closed(&mut self, _id: ListenerId) { + fn inject_listener_closed(&mut self, _id: ListenerId, _reason: Result<(), &std::io::Error>) { } /// Polls for things that swarm should do. @@ -304,4 +304,3 @@ impl Default for DialPeerCondition { DialPeerCondition::Disconnected } } - diff --git a/swarm/src/lib.rs b/swarm/src/lib.rs index 0d4d1255..097bc991 100644 --- a/swarm/src/lib.rs +++ b/swarm/src/lib.rs @@ -593,7 +593,10 @@ where TBehaviour: NetworkBehaviour, for addr in addresses.iter() { this.behaviour.inject_expired_listen_addr(addr); } - this.behaviour.inject_listener_closed(listener_id); + this.behaviour.inject_listener_closed(listener_id, match &reason { + Ok(()) => Ok(()), + Err(err) => Err(err), + }); return Poll::Ready(SwarmEvent::ListenerClosed { addresses, reason,