zmux
Rust implementation of the ZMux v1 single-connection multiplexing protocol.
zmux is the synchronous native runtime crate.
zmux-quinn is an optional async adapter crate and is documented in adapter/quinn/README.md.
Install
[]
= "<version>"
If you need the QUIC adapter:
[]
= "<same version as zmux>"
Quick Start (synchronous, blocking)
use TcpStream;
use ;
let socket = connect ?;
let conn = client_tcp ?;
let mut stream = conn.open_stream ?;
stream.write_all ?;
stream.close_write ?;
let mut peer = conn.accept_stream ?;
let mut buf = ;
let n = peer.read ?;
let _ = peer.close;
use TcpStream;
use ;
let socket = connect ?;
let options = open_info_bytes
.with_initial_priority
.with_initial_group;
let conn = new_tcp ?;
let = conn.open_and_send_with_options ?;
Public API (all exported items)
Root constructors and wrappers
new,client,servernew_tcp,client_tcp,server_tcpnew_transport,client_transport,server_transportbox_session,box_native_sessionboxed_closed_session,boxed_closed_native_sessionclosed_session,closed_native_sessionjoin_streams,join_native_streamsjoin_optional_streams,join_optional_native_streams
Configuration and conformance
ConfigOpenOptionsdefault_config,configure_default_config,reset_default_configDEFAULT_PING_PADDING_MAX_BYTES,DEFAULT_PING_PADDING_MIN_BYTESDEFAULT_PREFACE_PADDING_MAX_BYTES,DEFAULT_PREFACE_PADDING_MIN_BYTESSettings,SchedulerHintdefault_settings,marshal_settings_tlv,parse_settings_tlvClaim,ConformanceSuite,ImplementationProfile,ParseConformanceErrorcore_module_target_claims,core_module_target_implementation_profilescore_module_target_suites,known_claimsknown_implementation_profiles,known_conformance_suitesreference_profile_claim_gate
Protocol + wire helpers
Role,Negotiated,Prefacenegotiate_prefaces,parse_preface,parse_preface_prefix,read_preface,resolve_rolesFrame,FrameType,FrameView,LimitsFRAME_FLAG_FIN,FRAME_FLAG_OPEN_METADATAparse_frame,read_frameappend_varint,encode_varint,encode_varint_to_slice,parse_varint,read_varint,varint_lenMAX_VARINT62,MAX_VARINT_LENappend_tlv,parse_tlvs,parse_tlvs_view,visit_tlvs,Tlv,TlvViewbuild_code_payload,build_goaway_payload,parse_data_payloadparse_data_payload_view,parse_error_payload,parse_goaway_payloadparse_priority_update_payload,build_priority_update_payload,build_open_metadata_prefixparse_stream_metadata_tlvs,parse_stream_metadata_bytes_viewStreamMetadata,StreamMetadataView,MetadataUpdate,DataPayload,DataPayloadViewGoAwayPayload- capability helpers:
has_capability,Role,CAPABILITY_*,EXT_*,METADATA_*SETTING_*
Stream ID helpers
expected_next_peer_stream_id,first_local_stream_id,first_peer_stream_idinitial_receive_window,initial_send_windowmax_stream_id_for_class,stream_is_bidi,stream_is_locallocal_open_refused_by_goaway,peer_open_refused_by_goawayprojected_local_open_id,stream_opener,validate_local_open_idvalidate_stream_id_for_role,stream_kind_for_local
Session and stream types
ConnStream,SendStream,RecvStreamDuplexTransport,DuplexTransportControlDuplexInfoSide,DuplexStream,NativeDuplexStreamNativeSession,StreamApi,SendStreamApi,RecvStreamApi,StreamInfoSessionState,SessionStats,AbuseStats,AcceptBacklogStats,ActiveStreamStats,DiagnosticStats,FlushStats,HiddenStateStats,LivenessStats,MemoryStats,PressureStats,ProgressStats,ProvisionalStats,ReasonStats,RetentionStats,TelemetryStats,WriterQueueStats- Boxed/native trait-object types:
BoxSession,BoxStream,BoxSendStream,BoxRecvStreamBoxNativeSession,BoxNativeStream,BoxNativeSendStream,BoxNativeRecvStreamClosedSession,ClosedNativeSession
Async API aliases and wrappers
Session(AsyncSession)StreamApi,SendStreamApi,RecvStreamApi,StreamInfoAsyncStreamApi,AsyncSendStreamApi,AsyncRecvStreamApiAsyncDuplexStream,AsyncSessionjoin_streams,join_optional_streamsDuplexStream(async),BoxFuture,AsyncBoxFuturejoin_native_streamsandjoin_optional_native_streamsfor native handlesboxed_closed_session,boxed_closed_native_session,box_session,box_native_sessionasync_io,AsyncIo
Conn methods
new,client,server,new_tcp,client_tcp,server_tcpnew_transport,client_transport,server_transportlocal_addr,peer_addr,remote_addr- Stream open/accept:
open_stream,open_stream_timeoutopen_uni_stream,open_uni_stream_timeoutopen_stream_with_options,open_stream_with_options_timeoutopen_uni_stream_with_options,open_uni_stream_with_options_timeoutopen_and_send,open_and_send_timeoutopen_and_send_with_options,open_and_send_with_options_timeoutopen_and_send_vectored,open_and_send_vectored_timeoutopen_and_send_vectored_with_options,open_and_send_vectored_with_options_timeoutopen_uni_and_send,open_uni_and_send_timeoutopen_uni_and_send_with_options,open_uni_and_send_with_options_timeoutopen_uni_and_send_vectored,open_uni_and_send_vectored_timeoutopen_uni_and_send_vectored_with_options,open_uni_and_send_vectored_with_options_timeoutaccept_stream,accept_stream_timeoutaccept_uni_stream,accept_uni_stream_timeout
- lifecycle / control:
ping,ping_timeoutgoaway,goaway_with_errorclose,close_with_errorwait,wait_timeoutclosedclose_error,state,statspeer_close_error,peer_goaway_errorlocal_preface,peer_preface,negotiated
Stream methods
- identity:
stream_id,close_identity,opened_locally,bidirectional - state:
read_closed,write_closed - open metadata:
open_info,open_info_len,has_open_info,copy_open_info_tometadata,update_metadata
- address:
local_addr,peer_addr,remote_addr - read ops:
read,read_vectored,read_timeout,read_vectored_timeout,read_exact_timeout - read state:
set_read_deadline,set_read_timeout,set_deadline,clear_read_deadline,clear_deadline - write ops:
write,write_timeout,write_vectored,writev,write_vectored_timeout,writev_timeout - final writes:
write_final,write_vectored_final,writev_final - final timeout variants:
write_final_timeout,write_vectored_final_timeout,writev_final_timeout - close ops:
close_read,cancel_read,close_write,cancel_write,close,close_with_error
SendStream methods
- same identity/open metadata/address set as
Stream - write-only operations:
write,write_timeout,write_vectored,writev,write_vectored_timeout,writev_timeoutwrite_final,write_vectored_final,writev_finalwrite_final_timeout,write_vectored_final_timeout,writev_final_timeout
- metadata:
metadata,update_metadata - deadlines/timeouts:
set_write_deadline,set_write_timeout,set_deadline,clear_write_deadline,clear_deadline - close ops:
close_write,cancel_write,close,close_with_error
RecvStream methods
- same identity/open metadata/address set as
Stream - read-only operations:
read,read_vectored,read_timeout,read_vectored_timeout,read_exact_timeout
- deadlines/timeouts:
set_read_deadline,set_read_timeout,set_deadline,clear_read_deadline,clear_deadline - close ops:
close_read,cancel_read,close,close_with_error
Async equivalents
All async operations in zmux mirror the synchronous API through trait aliases and async futures:
AsyncSessionmethods:accept_stream*,accept_uni_stream*,open_stream*,open_uni_stream*,open_stream_with_options*,open_uni_stream_with_options*open_and_send*,open_and_send_vectored*,open_and_send_with_options*open_and_send_vectored_with_options*open_uni_and_send*,open_uni_and_send_vectored*,open_uni_and_send_with_options*open_uni_and_send_vectored_with_options*close,close_with_error,wait,wait_timeout,closed,close_error,state,stats
- async stream methods are the same set as sync versions, returning boxed futures:
read/read_timeout,read_vectored/read_vectored_timeout,read_exact/read_exact_timeoutwrite/write_timeout,write_vectored/write_vectored_timeoutwrite_final/write_final_timeout,write_vectored_final,write_vectored_final_timeoutclose_read,close_write,cancel_read,cancel_write,close,close_with_error
Errors and events
Error,Result,ErrorCode,ErrorDirection,ErrorOperation,ErrorScope,ErrorSourceError::helper constructors and terminal/error kind enums from API (TerminationKind)Event,EventType,StreamEventInfo,EventHandler- telemetry:
AbuseStats,AcceptBacklogStats,ActiveStreamStats,DiagnosticStats,FlushStats,HiddenStateStats,LivenessStats,MemoryStats,PressureStats,ProgressStats,ProvisionalStats,ReasonStats,RetentionStats,TelemetryStats,WriterQueueStats
Note
There is no docs/ folder needed for normal use of this repo.