6 releases

0.1.5 May 6, 2024
0.1.4 Apr 23, 2024

#2089 in Network programming

Custom license

44KB
876 lines

mptcp-rs

A helper crate to create Multipath TCP (MPTCP) sockets.

Features

The crate currently supports:

  • std::net::TcpStream and std::net::TcpListener
  • support Linux
  • support tokio
  • support async-std
  • support MacOS (TcpStream only)

Usage

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.

License

This project is licensed under the MIT License.

Dependencies

~1–30MB
~470K SLoC