pub struct SocketConfig {
pub params: BTreeMap<String, Vec<u8>>,
}Expand description
Configuration for socket creation and layer binding
This structure carries configuration from socket creation down through the protocol layers, allowing each layer to extract the information it needs to properly configure the socket.
§Design Philosophy
- Solves @petitstrawberry’s question: How does IP layer get IP address? How does TCP layer get port number? Answer: Through SocketConfig at socket creation.
- Protocol-agnostic: Generic key-value store, not tied to specific protocols
- Per-socket configuration: Each socket gets configured independently
§Example: Socket Creation with Configuration
ⓘ
// User creates TCP socket and binds to address
let mut config = SocketConfig::new();
config.set("ip_local", &[192, 168, 1, 100]);
config.set("tcp_local_port", &5000u16.to_be_bytes());
// Socket factory creates socket with config
let socket = tcp_socket_factory(&config)?;
// Inside TcpSocket::new():
// - TCP layer extracts "tcp_local_port" for its state
// - IP layer extracts "ip_local" for source address
// - Ethernet layer might extract interface name
// Later, when connect() is called:
config.set("ip_remote", &[192, 168, 1, 1]);
config.set("tcp_remote_port", &80u16.to_be_bytes());
socket.connect(&config)?;Fields§
§params: BTreeMap<String, Vec<u8>>Protocol-agnostic configuration parameters
Common keys (convention, not enforced):
- “ip_local”: Local IP address (IPv4 or IPv6 bytes)
- “ip_remote”: Remote IP address
- “tcp_local_port”: TCP local port (u16 big-endian)
- “tcp_remote_port”: TCP remote port
- “udp_local_port”: UDP local port
- “udp_remote_port”: UDP remote port
- “interface”: Network interface name
Implementations§
Source§impl SocketConfig
impl SocketConfig
Trait Implementations§
Source§impl Clone for SocketConfig
impl Clone for SocketConfig
Source§fn clone(&self) -> SocketConfig
fn clone(&self) -> SocketConfig
Returns a duplicate of the value. Read more
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SocketConfig
impl Debug for SocketConfig
Source§impl Default for SocketConfig
impl Default for SocketConfig
Source§fn default() -> SocketConfig
fn default() -> SocketConfig
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for SocketConfig
impl RefUnwindSafe for SocketConfig
impl Send for SocketConfig
impl Sync for SocketConfig
impl Unpin for SocketConfig
impl UnwindSafe for SocketConfig
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)