Skip to content

Commit fee3e00

Browse files
committed
Adopt new nix API's for SockaddrLike
Adopt new nix API's for SockaddrLike Signed-off-by: James Sturtevant <[email protected]>
1 parent e8bcf3c commit fee3e00

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

src/common.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,24 +100,23 @@ fn make_addr(_domain: Domain, sockaddr: &str) -> Result<UnixAddr> {
100100
UnixAddr::new(sockaddr).map_err(err_to_others_err!(e, ""))
101101
}
102102

103-
fn make_socket(addr: (&str, u32)) -> Result<(RawFd, Domain, SockAddr)> {
103+
fn make_socket(addr: (&str, u32)) -> Result<(RawFd, Domain, Box<dyn SockaddrLike>)> {
104104
let (sockaddr, _) = addr;
105105
let (domain, sockaddrv) = parse_sockaddr(sockaddr)?;
106106

107-
let get_sock_addr = |domain, sockaddr| -> Result<(RawFd, SockAddr)> {
107+
let get_sock_addr = |domain, sockaddr| -> Result<(RawFd, Box<dyn SockaddrLike>)> {
108108
let fd = socket(AddressFamily::Unix, SockType::Stream, SOCK_CLOEXEC, None)
109109
.map_err(|e| Error::Socket(e.to_string()))?;
110110

111111
// MacOS doesn't support atomic creation of a socket descriptor with SOCK_CLOEXEC flag,
112112
// so there is a chance of leak if fork + exec happens in between of these calls.
113113
#[cfg(target_os = "macos")]
114114
set_fd_close_exec(fd)?;
115-
116-
let sockaddr = SockAddr::Unix(make_addr(domain, sockaddr)?);
117-
Ok((fd, sockaddr))
115+
let sockaddr = make_addr(domain, sockaddr)?;
116+
Ok((fd, Box::new(sockaddr)))
118117
};
119118

120-
let (fd, sockaddr) = match domain {
119+
let (fd, sockaddr): (i32, Box<dyn SockaddrLike>) = match domain {
121120
Domain::Unix => get_sock_addr(domain, sockaddrv)?,
122121
#[cfg(any(target_os = "linux", target_os = "android"))]
123122
Domain::Vsock => {
@@ -138,8 +137,8 @@ fn make_socket(addr: (&str, u32)) -> Result<(RawFd, Domain, SockAddr)> {
138137
)
139138
.map_err(|e| Error::Socket(e.to_string()))?;
140139
let cid = addr.1;
141-
let sockaddr = SockAddr::new_vsock(cid, port);
142-
(fd, sockaddr)
140+
let sockaddr = VsockAddr::new(cid, port);
141+
(fd, Box::new(sockaddr))
143142
}
144143
};
145144

@@ -160,7 +159,7 @@ pub(crate) fn do_bind(sockaddr: &str) -> Result<(RawFd, Domain)> {
160159
let (fd, domain, sockaddr) = make_socket((sockaddr, VMADDR_CID_ANY))?;
161160

162161
setsockopt(fd, sockopt::ReusePort, &true)?;
163-
bind(fd, &sockaddr).map_err(err_to_others_err!(e, ""))?;
162+
bind(fd, sockaddr.as_ref()).map_err(err_to_others_err!(e, ""))?;
164163

165164
Ok((fd, domain))
166165
}
@@ -169,7 +168,7 @@ pub(crate) fn do_bind(sockaddr: &str) -> Result<(RawFd, Domain)> {
169168
pub(crate) unsafe fn client_connect(sockaddr: &str) -> Result<RawFd> {
170169
let (fd, _, sockaddr) = make_socket((sockaddr, VMADDR_CID_HOST))?;
171170

172-
connect(fd, &sockaddr)?;
171+
connect(fd, sockaddr.as_ref())?;
173172

174173
Ok(fd)
175174
}

0 commit comments

Comments
 (0)