1 use std::io; 2 use std::os::fd::{AsRawFd, FromRawFd}; 3 use std::os::unix::net::{self, SocketAddr}; 4 5 use crate::sys::unix::net::new_socket; 6 use crate::sys::unix::uds::unix_addr; 7 bind_addr(address: &SocketAddr) -> io::Result<net::UnixDatagram>8pub(crate) fn bind_addr(address: &SocketAddr) -> io::Result<net::UnixDatagram> { 9 let socket = unbound()?; 10 11 let (unix_address, addrlen) = unix_addr(address); 12 let sockaddr = &unix_address as *const libc::sockaddr_un as *const libc::sockaddr; 13 syscall!(bind(socket.as_raw_fd(), sockaddr, addrlen))?; 14 15 Ok(socket) 16 } 17 unbound() -> io::Result<net::UnixDatagram>18pub(crate) fn unbound() -> io::Result<net::UnixDatagram> { 19 let fd = new_socket(libc::AF_UNIX, libc::SOCK_DGRAM)?; 20 Ok(unsafe { net::UnixDatagram::from_raw_fd(fd) }) 21 } 22 pair() -> io::Result<(net::UnixDatagram, net::UnixDatagram)>23pub(crate) fn pair() -> io::Result<(net::UnixDatagram, net::UnixDatagram)> { 24 super::pair(libc::SOCK_DGRAM) 25 } 26