tokio::io::split()

    1. /// Split a single value implementing `AsyncRead + AsyncWrite` into separate
    2. /// `AsyncRead` and `AsyncWrite` handles.
    3. ///
    4. /// To restore this read/write object from its `split::ReadHalf` and
    5. /// `split::WriteHalf` use `unsplit`.
    6. pub fn split<T>(stream: T) -> (ReadHalf<T>, WriteHalf<T>)
    7. where T: AsyncRead + AsyncWrite {
    8. let inner = Arc::new(Inner {
    9. locked: AtomicBool::new(false),
    10. stream: UnsafeCell::new(stream),
    11. });
    12. let rd = ReadHalf { inner: inner.clone() };
    13. let wr = WriteHalf { inner };
    14. (rd, wr)
    15. }