mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-20 00:00:08 +02:00
net: flatten split mod (#1797)
The misc `split` types (`ReadHalf`, `WriteHalf`, `SendHalf`, `RecvHalf`) are moved up a module and the `*::split` module is removed.
This commit is contained in:
+8
-7
@@ -115,12 +115,13 @@ mod tcp {
|
||||
}
|
||||
|
||||
mod udp {
|
||||
use tokio::net::udp::{RecvHalf, SendHalf};
|
||||
use tokio::net::UdpSocket;
|
||||
|
||||
use futures::{future, Sink, SinkExt, Stream, StreamExt};
|
||||
use std::{error::Error, io, net::SocketAddr};
|
||||
use tokio::net::udp::{
|
||||
split::{UdpSocketRecvHalf, UdpSocketSendHalf},
|
||||
UdpSocket,
|
||||
};
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::net::SocketAddr;
|
||||
|
||||
pub async fn connect(
|
||||
addr: &SocketAddr,
|
||||
@@ -146,7 +147,7 @@ mod udp {
|
||||
|
||||
async fn send(
|
||||
mut stdin: impl Stream<Item = Result<Vec<u8>, io::Error>> + Unpin,
|
||||
writer: &mut UdpSocketSendHalf,
|
||||
writer: &mut SendHalf,
|
||||
) -> Result<(), io::Error> {
|
||||
while let Some(item) = stdin.next().await {
|
||||
let buf = item?;
|
||||
@@ -158,7 +159,7 @@ mod udp {
|
||||
|
||||
async fn recv(
|
||||
mut stdout: impl Sink<Vec<u8>, Error = io::Error> + Unpin,
|
||||
reader: &mut UdpSocketRecvHalf,
|
||||
reader: &mut RecvHalf,
|
||||
) -> Result<(), io::Error> {
|
||||
loop {
|
||||
let mut buf = vec![0; 1024];
|
||||
|
||||
@@ -16,12 +16,13 @@
|
||||
//! [`TcpListener`]: struct.TcpListener.html
|
||||
|
||||
mod listener;
|
||||
pub use self::listener::TcpListener;
|
||||
pub use listener::TcpListener;
|
||||
|
||||
mod incoming;
|
||||
pub use self::incoming::Incoming;
|
||||
pub use incoming::Incoming;
|
||||
|
||||
pub mod split;
|
||||
mod split;
|
||||
pub use split::{ReadHalf, WriteHalf};
|
||||
|
||||
mod stream;
|
||||
pub use self::stream::TcpStream;
|
||||
pub use stream::TcpStream;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
//! [`UdpSocket`]: struct.UdpSocket
|
||||
|
||||
mod socket;
|
||||
pub mod split;
|
||||
pub use socket::UdpSocket;
|
||||
|
||||
pub use self::socket::UdpSocket;
|
||||
mod split;
|
||||
pub use split::{RecvHalf, SendHalf, ReuniteError};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::future::poll_fn;
|
||||
use crate::io::PollEvented;
|
||||
use crate::net::udp::split::{split, UdpSocketRecvHalf, UdpSocketSendHalf};
|
||||
use crate::net::udp::split::{split, RecvHalf, SendHalf};
|
||||
use crate::net::ToSocketAddrs;
|
||||
|
||||
use std::convert::TryFrom;
|
||||
@@ -67,7 +67,7 @@ impl UdpSocket {
|
||||
///
|
||||
/// See the module level documenation of [`split`](super::split) for more
|
||||
/// details.
|
||||
pub fn split(self) -> (UdpSocketRecvHalf, UdpSocketSendHalf) {
|
||||
pub fn split(self) -> (RecvHalf, SendHalf) {
|
||||
split(self)
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -26,26 +26,26 @@ use std::sync::Arc;
|
||||
/// Use [`send_to`](#method.send_to) or [`send`](#method.send) to send
|
||||
/// datagrams.
|
||||
#[derive(Debug)]
|
||||
pub struct UdpSocketSendHalf(Arc<UdpSocket>);
|
||||
pub struct SendHalf(Arc<UdpSocket>);
|
||||
|
||||
/// The recv half after [`split`](super::UdpSocket::split).
|
||||
///
|
||||
/// Use [`recv_from`](#method.recv_from) or [`recv`](#method.recv) to receive
|
||||
/// datagrams.
|
||||
#[derive(Debug)]
|
||||
pub struct UdpSocketRecvHalf(Arc<UdpSocket>);
|
||||
pub struct RecvHalf(Arc<UdpSocket>);
|
||||
|
||||
pub(crate) fn split(socket: UdpSocket) -> (UdpSocketRecvHalf, UdpSocketSendHalf) {
|
||||
pub(crate) fn split(socket: UdpSocket) -> (RecvHalf, SendHalf) {
|
||||
let shared = Arc::new(socket);
|
||||
let send = shared.clone();
|
||||
let recv = shared;
|
||||
(UdpSocketRecvHalf(recv), UdpSocketSendHalf(send))
|
||||
(RecvHalf(recv), SendHalf(send))
|
||||
}
|
||||
|
||||
/// Error indicating two halves were not from the same socket, and thus could
|
||||
/// not be `reunite`d.
|
||||
#[derive(Debug)]
|
||||
pub struct ReuniteError(pub UdpSocketSendHalf, pub UdpSocketRecvHalf);
|
||||
pub struct ReuniteError(pub SendHalf, pub RecvHalf);
|
||||
|
||||
impl fmt::Display for ReuniteError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
@@ -58,7 +58,7 @@ impl fmt::Display for ReuniteError {
|
||||
|
||||
impl Error for ReuniteError {}
|
||||
|
||||
fn reunite(s: UdpSocketSendHalf, r: UdpSocketRecvHalf) -> Result<UdpSocket, ReuniteError> {
|
||||
fn reunite(s: SendHalf, r: RecvHalf) -> Result<UdpSocket, ReuniteError> {
|
||||
if Arc::ptr_eq(&s.0, &r.0) {
|
||||
drop(r);
|
||||
// Only two instances of the `Arc` are ever created, one for the
|
||||
@@ -71,11 +71,11 @@ fn reunite(s: UdpSocketSendHalf, r: UdpSocketRecvHalf) -> Result<UdpSocket, Reun
|
||||
}
|
||||
}
|
||||
|
||||
impl UdpSocketRecvHalf {
|
||||
impl RecvHalf {
|
||||
/// Attempts to put the two "halves" of a `UdpSocket` back together and
|
||||
/// recover the original socket. Succeeds only if the two "halves"
|
||||
/// originated from the same call to `UdpSocket::split`.
|
||||
pub fn reunite(self, other: UdpSocketSendHalf) -> Result<UdpSocket, ReuniteError> {
|
||||
pub fn reunite(self, other: SendHalf) -> Result<UdpSocket, ReuniteError> {
|
||||
reunite(other, self)
|
||||
}
|
||||
|
||||
@@ -106,11 +106,11 @@ impl UdpSocketRecvHalf {
|
||||
}
|
||||
}
|
||||
|
||||
impl UdpSocketSendHalf {
|
||||
impl SendHalf {
|
||||
/// Attempts to put the two "halves" of a `UdpSocket` back together and
|
||||
/// recover the original socket. Succeeds only if the two "halves"
|
||||
/// originated from the same call to `UdpSocket::split`.
|
||||
pub fn reunite(self, other: UdpSocketRecvHalf) -> Result<UdpSocket, ReuniteError> {
|
||||
pub fn reunite(self, other: RecvHalf) -> Result<UdpSocket, ReuniteError> {
|
||||
reunite(self, other)
|
||||
}
|
||||
|
||||
@@ -135,13 +135,13 @@ impl UdpSocketSendHalf {
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<UdpSocket> for UdpSocketSendHalf {
|
||||
impl AsRef<UdpSocket> for SendHalf {
|
||||
fn as_ref(&self) -> &UdpSocket {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<UdpSocket> for UdpSocketRecvHalf {
|
||||
impl AsRef<UdpSocket> for RecvHalf {
|
||||
fn as_ref(&self) -> &UdpSocket {
|
||||
&self.0
|
||||
}
|
||||
|
||||
@@ -3,18 +3,19 @@
|
||||
//! This crate provides APIs for using Unix Domain Sockets with Tokio.
|
||||
|
||||
mod datagram;
|
||||
pub use self::datagram::UnixDatagram;
|
||||
pub use datagram::UnixDatagram;
|
||||
|
||||
mod incoming;
|
||||
pub use self::incoming::Incoming;
|
||||
pub use incoming::Incoming;
|
||||
|
||||
mod listener;
|
||||
pub use self::listener::UnixListener;
|
||||
pub use listener::UnixListener;
|
||||
|
||||
pub mod split;
|
||||
mod split;
|
||||
pub use split::{ReadHalf, WriteHalf};
|
||||
|
||||
mod stream;
|
||||
pub use self::stream::UnixStream;
|
||||
pub use stream::UnixStream;
|
||||
|
||||
mod ucred;
|
||||
pub use self::ucred::UCred;
|
||||
pub use ucred::UCred;
|
||||
|
||||
Reference in New Issue
Block a user