A helper crate to create Multipath TCP (MPTCP) sockets.
The crate currently supports:
-
std::net::TcpStream
andstd::net::TcpListener
- support Linux
- support tokio
- support async-std
- support MacOS (TcpStream only)
To create an MPTCP stream:
use mptcp::MptcpStreamExt;
let stream = TcpStream::connect_mptcp("www.google.com:443").unwrap();
The connect_mptcp
method handles falling back to a TCP socket in case MPTCP
is not available on the system. Use connect_mptcp_force
if you require to
use MPTCP.
To create an MPTCP listener:
use mptcp::MptcpListenerExt;
let listener = TcpListener::bind_mptcp("localhost:8080").unwrap();
Similarly to the Stream. The bind_mptcp
method handles falling back to a
TCP socket in case MPTCP is not available on the system. Use bind_mptcp_force
if you require to use MPTCP.
Use the into_socket()
to retrieve to retrieve a TcpStream
or TcpListener
to
be reused in existing libraries. MPTCP sockets provides the same API as TCP
sockets.
You can also check whether a TcpStream
uses an underlying MPTCP socket using:
use mptcp::{MptcpExt, MptcpStatus};
let stream : TcpStream = ...;
println!("stream uses mptcp: {}", matches!(stream.mptcp_status(), MptcpStatus::Mptcp { .. }));
Tokio support can be enabled via feature: tokio
. Usage is similar for std lib
by importing mptcp::tokio::MptcpStreamExt
.
This project is licensed under the MIT License.