Index: erbium-net/Cargo.toml
===================================================================
--- erbium-net.orig/Cargo.toml
+++ erbium-net/Cargo.toml
@@ -44,7 +44,7 @@ version = "0.8"
 features = ["tokio_socket"]
 
 [dependencies.nix]
-version = "0.27"
+version = "0.29"
 features = ["net", "uio", "fs"]
 
 [dependencies.tokio]
Index: erbium-net/src/packet.rs
===================================================================
--- erbium-net.orig/src/packet.rs
+++ erbium-net/src/packet.rs
@@ -175,8 +175,8 @@ impl<'a> Fragment<'a> {
         let l = f.len();
         let mut pseudohdr = Self::from_tail(Tail::Fragment(Box::new(f.clone())));
         let udp_protocol: u8 = 17;
-        pseudohdr.push_bytes(&u32::to_be_bytes(src.ip()));
-        pseudohdr.push_bytes(&u32::to_be_bytes(dst.ip()));
+        pseudohdr.push_bytes(&src.ip().octets());
+        pseudohdr.push_bytes(&dst.ip().octets());
         pseudohdr.push_u8(0x00_u8);
         pseudohdr.push_u8(udp_protocol);
         pseudohdr.push_be16(l as u16);
Index: erbium-net/src/socket.rs
===================================================================
--- erbium-net.orig/src/socket.rs
+++ erbium-net/src/socket.rs
@@ -129,8 +129,8 @@ impl RecvMsg {
             ipv4pktinfo: None,
             ipv6pktinfo: None,
         };
-
-        for cmsg in m.cmsgs() {
+        match m.cmsgs() {
+          Ok(cmsgs) => for cmsg in cmsgs {
             use nix::sys::socket::ControlMessageOwned;
             match cmsg {
                 ControlMessageOwned::ScmTimestamp(rtime) => {
@@ -144,6 +144,8 @@ impl RecvMsg {
                 }
                 x => log::warn!("Unknown control message {:?}", x),
             }
+          },
+          Err(e) => log::warn!("Failed to get control messages {:?}", e),
         }
 
         r
