您需要将套接字转换为以下类型:
tokio::net::UnixListener
. 完成此操作后,需要实现
Accept
特质您可以通过以下方式实现该特性:
use hyper::server::accept::Accept;
use tokio::net::UnixListener;
use std::pin::Pin;
use std::task::{Context, Poll};
pub struct UDSAccept {
inner: UnixListener,
}
impl Accept for UDSAccept {
type Conn = tokio::net::UnixStream;
type Error = std::io::Error;
fn poll_accept(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Self::Conn, Self::Error>>> {
match self.inner.poll_accept(cx) {
Poll::Pending => Poll::Pending,
Poll::Ready(Ok((socket, _addr))) => Poll::Ready(Some(Ok(socket))),
Poll::Ready(Err(err)) => Poll::Ready(Some(Err(err))),
}
}
}
Server::builder
.
如果Tokio类型附带的构造函数没有提供您需要的所有选项,并且您仍然希望使用
socket2
要构造它,可以首先将其转换为std
UnixListener
然后打电话给东京的
from_std
方法请注意,执行此操作时,您必须自己将套接字设置为非阻塞模式!