Index: tokio-uring/Cargo.toml
===================================================================
--- tokio-uring.orig/Cargo.toml
+++ tokio-uring/Cargo.toml
@@ -58,11 +58,11 @@ version = "0.2.80"
 version = "0.4.2"
 
 [dependencies.socket2]
-version = "0.4.4"
+version = "0.5"
 features = ["all"]
 
 [dependencies.tokio]
-version = "1.2"
+version = "1.30"
 features = [
     "net",
     "rt",
@@ -82,7 +82,7 @@ version = "0.26.1"
 version = "3.2.0"
 
 [dev-dependencies.tokio]
-version = "1.21.2"
+version = "1.30"
 
 [dev-dependencies.tokio-test]
 version = "0.4.2"
Index: tokio-uring/src/io/accept.rs
===================================================================
--- tokio-uring.orig/src/io/accept.rs
+++ tokio-uring/src/io/accept.rs
@@ -46,7 +46,7 @@ impl Completable for Accept {
         let fd = SharedFd::new(fd as i32);
         let socket = Socket { fd };
         let (_, addr) = unsafe {
-            socket2::SockAddr::init(move |addr_storage, len| {
+            socket2::SockAddr::try_init(move |addr_storage, len| {
                 self.socketaddr.0.clone_into(&mut *addr_storage);
                 *len = self.socketaddr.1;
                 Ok(())
Index: tokio-uring/src/io/recv_from.rs
===================================================================
--- tokio-uring.orig/src/io/recv_from.rs
+++ tokio-uring/src/io/recv_from.rs
@@ -24,7 +24,7 @@ impl<T: BoundedBufMut> Op<RecvFrom<T>> {
             std::slice::from_raw_parts_mut(buf.stable_mut_ptr(), buf.bytes_total())
         })];
 
-        let socket_addr = Box::new(unsafe { SockAddr::init(|_, _| Ok(()))?.1 });
+        let socket_addr = Box::new(unsafe { SockAddr::try_init(|_, _| Ok(()))?.1 });
 
         let mut msghdr: Box<libc::msghdr> = Box::new(unsafe { std::mem::zeroed() });
         msghdr.msg_iov = io_slices.as_mut_ptr().cast();
Index: tokio-uring/src/io/recvmsg.rs
===================================================================
--- tokio-uring.orig/src/io/recvmsg.rs
+++ tokio-uring/src/io/recvmsg.rs
@@ -28,7 +28,7 @@ impl<T: BoundedBufMut> Op<RecvMsg<T>> {
             }));
         }
 
-        let socket_addr = Box::new(unsafe { SockAddr::init(|_, _| Ok(()))?.1 });
+        let socket_addr = Box::new(unsafe { SockAddr::try_init(|_, _| Ok(()))?.1 });
 
         let mut msghdr: Box<libc::msghdr> = Box::new(unsafe { std::mem::zeroed() });
         msghdr.msg_iov = io_slices.as_mut_ptr().cast();
Index: tokio-uring/src/io/socket.rs
===================================================================
--- tokio-uring.orig/src/io/socket.rs
+++ tokio-uring/src/io/socket.rs
@@ -10,6 +10,7 @@ use std::{
     io,
     net::SocketAddr,
     os::unix::io::{AsRawFd, IntoRawFd, RawFd},
+    os::fd::{AsFd, BorrowedFd},
     path::Path,
 };
 
@@ -285,3 +286,12 @@ impl AsRawFd for Socket {
         self.fd.raw_fd()
     }
 }
+
+impl AsFd for Socket {
+    fn as_fd(&self) -> BorrowedFd {
+        unsafe {
+            BorrowedFd::borrow_raw(self.fd.raw_fd())
+        }
+    }
+}
+
