diff --git a/src/stream/tcp.rs b/src/stream/tcp.rs index f4dd4d1..7ca817d 100644 --- a/src/stream/tcp.rs +++ b/src/stream/tcp.rs @@ -64,7 +64,7 @@ impl IpStackTcpStream { src_addr: SocketAddr, dst_addr: SocketAddr, tcp: TcpHeaderWrapper, - pkt_sender: PacketSender, + packet_sender: PacketSender, stream_receiver: PacketReceiver, mtu: u16, tcp_timeout: Duration, @@ -73,7 +73,7 @@ impl IpStackTcpStream { src_addr, dst_addr, stream_receiver, - packet_sender: pkt_sender.clone(), + packet_sender, packet_to_send: None, tcb: Tcb::new(tcp.inner().sequence_number + 1, tcp_timeout), mtu, @@ -84,7 +84,10 @@ impl IpStackTcpStream { return Ok(stream); } if !tcp.inner().rst { - _ = pkt_sender.send(stream.create_rev_packet(RST | ACK, TTL, None, Vec::new())?); + let pkt = stream.create_rev_packet(RST | ACK, TTL, None, Vec::new())?; + if let Err(err) = stream.packet_sender.send(pkt) { + log::warn!("Error sending RST packet: {:?}", err); + } } Err(IpStackError::InvalidTcpPacket) } @@ -156,7 +159,8 @@ impl IpStackTcpStream { tcp_header.header_len() as u16, ); payload.truncate(payload_len as usize); - ip_h.payload_length = (payload.len() + tcp_header.header_len()) as u16; + let len = payload.len() + tcp_header.header_len(); + ip_h.set_payload_length(len).map_err(IpStackError::from)?; IpHeader::Ipv6(ip_h) } @@ -513,7 +517,9 @@ impl AsyncWrite for IpStackTcpStream { impl Drop for IpStackTcpStream { fn drop(&mut self) { if let Ok(p) = self.create_rev_packet(NON, DROP_TTL, None, Vec::new()) { - _ = self.packet_sender.send(p); + if let Err(err) = self.packet_sender.send(p) { + log::warn!("Error sending NON packet: {:?}", err); + } } } } diff --git a/src/stream/tcp_wrapper.rs b/src/stream/tcp_wrapper.rs index 19bddd2..fe48124 100644 --- a/src/stream/tcp_wrapper.rs +++ b/src/stream/tcp_wrapper.rs @@ -107,7 +107,9 @@ impl Drop for IpStackTcpStream { fn drop(&mut self) { if let Some(mut inner) = self.inner.take() { tokio::spawn(async move { - _ = timeout(Duration::from_secs(2), inner.shutdown()).await; + if let Err(err) = timeout(Duration::from_secs(2), inner.shutdown()).await { + log::warn!("Error while dropping IpStackTcpStream: {:?}", err); + } }); } }