diff --git a/vnt/tun/src/packet/ethernet/packet.rs b/vnt/tun/src/packet/ethernet/packet.rs index a9540a7..440d61a 100644 --- a/vnt/tun/src/packet/ethernet/packet.rs +++ b/vnt/tun/src/packet/ethernet/packet.rs @@ -21,7 +21,7 @@ impl> EthernetPacket { let packet = EthernetPacket::unchecked(buffer); //头部固定14位 if packet.buffer.as_ref().len() < 14 { - Err(io::Error::from(io::ErrorKind::InvalidData))?; + Err(io::Error::new(io::ErrorKind::InvalidData,format!("len={}", packet.buffer.as_ref().len())))?; } Ok(packet) diff --git a/vnt/tun/src/packet/mod.rs b/vnt/tun/src/packet/mod.rs index 75d9f31..07905b7 100644 --- a/vnt/tun/src/packet/mod.rs +++ b/vnt/tun/src/packet/mod.rs @@ -13,8 +13,11 @@ where let mut eth_buf = [0; 65536]; loop { let len = read_fn(&mut eth_buf)?; + if len == 0{ + return Ok(len); + } //处理arp包 - let mut ether = ethernet::packet::EthernetPacket::unchecked(&mut eth_buf[..len]); + let mut ether = ethernet::packet::EthernetPacket::new(&mut eth_buf[..len])?; match ether.protocol() { Protocol::Ipv4 => { let len = ether.payload().len();