pub struct UnixListener(_);
Available on Unix only.
Expand description
表示 Unix 域套接字服务器的结构体。
Examples
use std::thread;
use std::os::unix::net::{UnixStream, UnixListener};
fn handle_client(stream: UnixStream) {
// ...
}
fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/path/to/the/socket")?;
// 接受连接并处理它们,为每个连接产生一个新线程
for stream in listener.incoming() {
match stream {
Ok(stream) => {
/* connection succeeded */
thread::spawn(|| handle_client(stream));
}
Err(err) => {
/* connection failed */
break;
}
}
}
Ok(())
}
RunImplementations§
source§impl UnixListener
impl UnixListener
1.70.0 · sourcepub fn bind_addr(socket_addr: &SocketAddr) -> Result<UnixListener>
pub fn bind_addr(socket_addr: &SocketAddr) -> Result<UnixListener>
创建绑定到指定 套接字地址 的新 UnixListener
。
Examples
use std::os::unix::net::{UnixListener};
fn main() -> std::io::Result<()> {
let listener1 = UnixListener::bind("path/to/socket")?;
let addr = listener1.local_addr()?;
let listener2 = match UnixListener::bind_addr(&addr) {
Ok(sock) => sock,
Err(err) => {
println!("Couldn't bind: {err:?}");
return Err(err);
}
};
Ok(())
}
Runsourcepub fn accept(&self) -> Result<(UnixStream, SocketAddr)>
pub fn accept(&self) -> Result<(UnixStream, SocketAddr)>
接受与此侦听器的新传入连接。
该函数将阻塞调用线程,直到建立新的 Unix 连接为止。
建立后,将返回相应的 UnixStream
和远程对等方的地址。
Examples
use std::os::unix::net::UnixListener;
fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/path/to/the/socket")?;
match listener.accept() {
Ok((socket, addr)) => println!("Got a client: {addr:?}"),
Err(e) => println!("accept function failed: {e:?}"),
}
Ok(())
}
Runsourcepub fn try_clone(&self) -> Result<UnixListener>
pub fn try_clone(&self) -> Result<UnixListener>
为底层套接字创建一个新的独立的拥有所有权的句柄。
返回的 UnixListener
是与此对象引用相同的套接字的引用。
这两个句柄均可用于接受传入连接,并且在一个侦听器上设置的选项将影响另一个。
Examples
use std::os::unix::net::UnixListener;
fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/path/to/the/socket")?;
let listener_copy = listener.try_clone().expect("try_clone failed");
Ok(())
}
Runsourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
sourcepub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>
pub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>
将套接字移入或移出非阻塞模式。
这将导致 accept
操作变为非阻塞,即立即从其调用中返回。
如果 IO 操作成功,则返回 Ok
,并且不需要进一步的操作。
如果 IO 操作无法完成,需要重试,则返回类型为 io::ErrorKind::WouldBlock
的错误。
Examples
use std::os::unix::net::UnixListener;
fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/path/to/the/socket")?;
listener.set_nonblocking(true).expect("Couldn't set non blocking");
Ok(())
}
Runsourcepub fn take_error(&self) -> Result<Option<Error>>
pub fn take_error(&self) -> Result<Option<Error>>
sourcepub fn incoming(&self) -> Incoming<'_> ⓘ
pub fn incoming(&self) -> Incoming<'_> ⓘ
返回传入连接上的迭代器。
迭代器将永远不会返回 None
,也不会产生对等方的 SocketAddr
结构体。
Examples
use std::thread;
use std::os::unix::net::{UnixStream, UnixListener};
fn handle_client(stream: UnixStream) {
// ...
}
fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/path/to/the/socket")?;
for stream in listener.incoming() {
match stream {
Ok(stream) => {
thread::spawn(|| handle_client(stream));
}
Err(err) => {
break;
}
}
}
Ok(())
}
RunTrait Implementations§
1.63.0 · source§impl AsFd for UnixListener
impl AsFd for UnixListener
source§fn as_fd(&self) -> BorrowedFd<'_>
fn as_fd(&self) -> BorrowedFd<'_>
借用文件描述符。 Read more
source§impl Debug for UnixListener
impl Debug for UnixListener
1.63.0 · source§impl From<OwnedFd> for UnixListener
impl From<OwnedFd> for UnixListener
source§fn from(fd: OwnedFd) -> UnixListener
fn from(fd: OwnedFd) -> UnixListener
从输入类型转换为此类型。
1.63.0 · source§impl From<UnixListener> for OwnedFd
impl From<UnixListener> for OwnedFd
source§fn from(listener: UnixListener) -> OwnedFd
fn from(listener: UnixListener) -> OwnedFd
从输入类型转换为此类型。
source§impl FromRawFd for UnixListener
impl FromRawFd for UnixListener
source§unsafe fn from_raw_fd(fd: RawFd) -> UnixListener
unsafe fn from_raw_fd(fd: RawFd) -> UnixListener
根据给定的原始文件描述符构造
Self
的新实例。 Read moresource§impl<'a> IntoIterator for &'a UnixListener
impl<'a> IntoIterator for &'a UnixListener
source§impl IntoRawFd for UnixListener
impl IntoRawFd for UnixListener
source§fn into_raw_fd(self) -> RawFd
fn into_raw_fd(self) -> RawFd
消费这个对象,返回原始的底层文件描述符。 Read more