mirror of
https://github.com/fafhrd91/actix-net
synced 2024-11-27 18:02:58 +01:00
Reduce cfg flags in actix_server::socket (#325)
This commit is contained in:
parent
0a11cf5cba
commit
ddce2d6d12
@ -12,18 +12,7 @@ pub(crate) use {
|
|||||||
use std::{fmt, io};
|
use std::{fmt, io};
|
||||||
|
|
||||||
use actix_rt::net::TcpStream;
|
use actix_rt::net::TcpStream;
|
||||||
use mio::event::Source;
|
use mio::{event::Source, Interest, Registry, Token};
|
||||||
use mio::net::TcpStream as MioTcpStream;
|
|
||||||
use mio::{Interest, Registry, Token};
|
|
||||||
|
|
||||||
#[cfg(windows)]
|
|
||||||
use std::os::windows::io::{FromRawSocket, IntoRawSocket};
|
|
||||||
#[cfg(unix)]
|
|
||||||
use {
|
|
||||||
actix_rt::net::UnixStream,
|
|
||||||
mio::net::{SocketAddr as MioSocketAddr, UnixStream as MioUnixStream},
|
|
||||||
std::os::unix::io::{FromRawFd, IntoRawFd},
|
|
||||||
};
|
|
||||||
|
|
||||||
pub(crate) enum MioListener {
|
pub(crate) enum MioListener {
|
||||||
Tcp(MioTcpListener),
|
Tcp(MioTcpListener),
|
||||||
@ -131,7 +120,7 @@ impl fmt::Display for MioListener {
|
|||||||
pub(crate) enum SocketAddr {
|
pub(crate) enum SocketAddr {
|
||||||
Tcp(StdSocketAddr),
|
Tcp(StdSocketAddr),
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
Uds(MioSocketAddr),
|
Uds(mio::net::SocketAddr),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for SocketAddr {
|
impl fmt::Display for SocketAddr {
|
||||||
@ -156,9 +145,9 @@ impl fmt::Debug for SocketAddr {
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum MioStream {
|
pub enum MioStream {
|
||||||
Tcp(MioTcpStream),
|
Tcp(mio::net::TcpStream),
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
Uds(MioUnixStream),
|
Uds(mio::net::UnixStream),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// helper trait for converting mio stream to tokio stream.
|
/// helper trait for converting mio stream to tokio stream.
|
||||||
@ -166,47 +155,60 @@ pub trait FromStream: Sized {
|
|||||||
fn from_mio(sock: MioStream) -> io::Result<Self>;
|
fn from_mio(sock: MioStream) -> io::Result<Self>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This is a workaround and we need an efficient way to convert between mio and tokio stream
|
|
||||||
#[cfg(unix)]
|
|
||||||
impl FromStream for TcpStream {
|
|
||||||
fn from_mio(sock: MioStream) -> io::Result<Self> {
|
|
||||||
match sock {
|
|
||||||
MioStream::Tcp(mio) => {
|
|
||||||
let raw = IntoRawFd::into_raw_fd(mio);
|
|
||||||
// SAFETY: This is a in place conversion from mio stream to tokio stream.
|
|
||||||
TcpStream::from_std(unsafe { FromRawFd::from_raw_fd(raw) })
|
|
||||||
}
|
|
||||||
MioStream::Uds(_) => {
|
|
||||||
panic!("Should not happen, bug in server impl");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: This is a workaround and we need an efficient way to convert between mio and tokio stream
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
impl FromStream for TcpStream {
|
mod win_impl {
|
||||||
fn from_mio(sock: MioStream) -> io::Result<Self> {
|
use super::*;
|
||||||
match sock {
|
|
||||||
MioStream::Tcp(mio) => {
|
use std::os::windows::io::{FromRawSocket, IntoRawSocket};
|
||||||
let raw = IntoRawSocket::into_raw_socket(mio);
|
|
||||||
// SAFETY: This is a in place conversion from mio stream to tokio stream.
|
// FIXME: This is a workaround and we need an efficient way to convert between mio and tokio stream
|
||||||
TcpStream::from_std(unsafe { FromRawSocket::from_raw_socket(raw) })
|
impl FromStream for TcpStream {
|
||||||
|
fn from_mio(sock: MioStream) -> io::Result<Self> {
|
||||||
|
match sock {
|
||||||
|
MioStream::Tcp(mio) => {
|
||||||
|
let raw = IntoRawSocket::into_raw_socket(mio);
|
||||||
|
// SAFETY: This is a in place conversion from mio stream to tokio stream.
|
||||||
|
TcpStream::from_std(unsafe { FromRawSocket::from_raw_socket(raw) })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This is a workaround and we need an efficient way to convert between mio and tokio stream
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
impl FromStream for UnixStream {
|
mod unix_impl {
|
||||||
fn from_mio(sock: MioStream) -> io::Result<Self> {
|
use super::*;
|
||||||
match sock {
|
|
||||||
MioStream::Tcp(_) => panic!("Should not happen, bug in server impl"),
|
use std::os::unix::io::{FromRawFd, IntoRawFd};
|
||||||
MioStream::Uds(mio) => {
|
|
||||||
let raw = IntoRawFd::into_raw_fd(mio);
|
use actix_rt::net::UnixStream;
|
||||||
// SAFETY: This is a in place conversion from mio stream to tokio stream.
|
|
||||||
UnixStream::from_std(unsafe { FromRawFd::from_raw_fd(raw) })
|
// FIXME: This is a workaround and we need an efficient way to convert between mio and tokio stream
|
||||||
|
impl FromStream for TcpStream {
|
||||||
|
fn from_mio(sock: MioStream) -> io::Result<Self> {
|
||||||
|
match sock {
|
||||||
|
MioStream::Tcp(mio) => {
|
||||||
|
let raw = IntoRawFd::into_raw_fd(mio);
|
||||||
|
// SAFETY: This is a in place conversion from mio stream to tokio stream.
|
||||||
|
TcpStream::from_std(unsafe { FromRawFd::from_raw_fd(raw) })
|
||||||
|
}
|
||||||
|
MioStream::Uds(_) => {
|
||||||
|
panic!("Should not happen, bug in server impl");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: This is a workaround and we need an efficient way to convert between mio and tokio stream
|
||||||
|
impl FromStream for UnixStream {
|
||||||
|
fn from_mio(sock: MioStream) -> io::Result<Self> {
|
||||||
|
match sock {
|
||||||
|
MioStream::Tcp(_) => panic!("Should not happen, bug in server impl"),
|
||||||
|
MioStream::Uds(mio) => {
|
||||||
|
let raw = IntoRawFd::into_raw_fd(mio);
|
||||||
|
// SAFETY: This is a in place conversion from mio stream to tokio stream.
|
||||||
|
UnixStream::from_std(unsafe { FromRawFd::from_raw_fd(raw) })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user