1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
Index: ttrpc/Cargo.toml
===================================================================
--- ttrpc.orig/Cargo.toml
+++ ttrpc/Cargo.toml
@@ -55,7 +55,8 @@ features = ["extra_traits"]
version = "0.4"
[dependencies.nix]
-version = "0.26.2"
+version = "0.27"
+features = ["fs", "socket"]
[dependencies.protobuf]
version = "2.14"
@@ -91,5 +92,5 @@ default = ["sync"]
sync = []
[target."cfg(any(target_os = \"linux\", target_os = \"android\"))".dependencies.tokio-vsock]
-version = "0.4.0"
+version = "0.7.0"
optional = true
Index: ttrpc/src/common.rs
===================================================================
--- ttrpc.orig/src/common.rs
+++ ttrpc/src/common.rs
@@ -14,6 +14,8 @@ use nix::fcntl::FdFlag;
use nix::fcntl::{fcntl, FcntlArg, OFlag};
use nix::sys::socket::*;
use std::os::unix::io::RawFd;
+use std::os::fd::IntoRawFd;
+use std::os::fd::BorrowedFd;
use crate::error::{Error, Result};
@@ -31,7 +33,8 @@ pub(crate) fn do_listen(listener: RawFd)
)));
}
- listen(listener, 10).map_err(|e| Error::Socket(e.to_string()))
+ let listener = unsafe { BorrowedFd::borrow_raw(listener) };
+ listen(&listener, 10).map_err(|e| Error::Socket(e.to_string()))
}
#[cfg(any(target_os = "linux", target_os = "android"))]
@@ -114,7 +117,7 @@ fn make_socket(addr: (&str, u32)) -> Res
#[cfg(target_os = "macos")]
set_fd_close_exec(fd)?;
let sockaddr = make_addr(domain, sockaddr)?;
- Ok((fd, Box::new(sockaddr)))
+ Ok((fd.into_raw_fd(), Box::new(sockaddr)))
};
let (fd, sockaddr): (i32, Box<dyn SockaddrLike>) = match domain {
@@ -139,7 +142,7 @@ fn make_socket(addr: (&str, u32)) -> Res
.map_err(|e| Error::Socket(e.to_string()))?;
let cid = addr.1;
let sockaddr = VsockAddr::new(cid, port);
- (fd, Box::new(sockaddr))
+ (fd.into_raw_fd(), Box::new(sockaddr))
}
};
@@ -159,7 +162,7 @@ const VMADDR_CID_HOST: u32 = 0;
pub(crate) fn do_bind(sockaddr: &str) -> Result<(RawFd, Domain)> {
let (fd, domain, sockaddr) = make_socket((sockaddr, VMADDR_CID_ANY))?;
- setsockopt(fd, sockopt::ReusePort, &true)?;
+ setsockopt(unsafe{&BorrowedFd::borrow_raw(fd)}, sockopt::ReusePort, &true)?;
bind(fd, sockaddr.as_ref()).map_err(err_to_others_err!(e, ""))?;
Ok((fd, domain))
Index: ttrpc/src/sync/sys/unix/net.rs
===================================================================
--- ttrpc.orig/src/sync/sys/unix/net.rs
+++ ttrpc/src/sync/sys/unix/net.rs
@@ -18,6 +18,7 @@ use nix::sys::socket::*;
use std::io::{self};
use std::os::unix::io::RawFd;
use std::os::unix::prelude::AsRawFd;
+use std::os::fd::IntoRawFd;
use nix::Error;
use nix::unistd::*;
@@ -255,7 +256,7 @@ impl ClientConnection {
ClientConnection {
fd,
- socket_pair: (recver_fd, close_fd)
+ socket_pair: (recver_fd.into_raw_fd(), close_fd.into_raw_fd())
}
}
|