SocketConfig

Struct SocketConfig 

Source
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

Source

pub fn new() -> Self

Create a new empty configuration

Source

pub fn set(&mut self, key: &str, value: &[u8])

Set a configuration parameter

Source

pub fn get(&self, key: &str) -> Option<&[u8]>

Get a configuration parameter

Source

pub fn get_u16(&self, key: &str) -> Option<u16>

Get a u16 value (for ports)

Source

pub fn get_ipv4(&self, key: &str) -> Option<[u8; 4]>

Get an IPv4 address

Trait Implementations§

Source§

impl Clone for SocketConfig

Source§

fn clone(&self) -> SocketConfig

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SocketConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SocketConfig

Source§

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 T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.