Xirsys.Sockets.Config (xturn_sockets v2.2.0)

View Source

Runtime configuration for :xturn_sockets.

Lookup order for get/2: host app (:config_app), then :xturn_sockets, then the caller's default.

Set config :xturn_sockets, config_app: :my_app so config :my_app, ... overrides library defaults without copying every key.

Summary

Functions

Socket options to re-arm UDP/TCP listeners and relay sockets after each read.

Per-connection receive/send buffer size in bytes. Default 262_144.

Fixed-window request counter for one client IP.

Looks up key with host-app precedence.

Buffer size for shared listener sockets (UDP listen, TCP accept).

Maximum concurrent per-peer UDP sessions. Default 100_000.

Whether check_rate_limit/1 is armed. Default true.

Merged reorder tunables for a named tier.

Advertised IPv6 bind address. Default {0, 0, 0, 0, 0, 0, 0, 0}.

Advertised IPv4 bind address. Default {0, 0, 0, 0}.

Local IPv6 address used when sockname/1 is unavailable. Default {0, 0, 0, 0, 0, 0, 0, 0}.

Local IPv4 address used when sockname/1 is unavailable. Default {0, 0, 0, 0}.

TLS/DTLS handshake timeout in milliseconds. Default 10_000.

Default :pool dispatch size when a tier omits :pool_size. Falls back to System.schedulers_online/0.

UDP {active, N} batch size. 1 means active: :once. Default 32.

Idle lifetime for per-peer UDP sessions, in milliseconds. Default 30_000.

Interval for sweeping idle UDP sessions, in milliseconds. Default 5_000.

Functions

active_socket_opts()

@spec active_socket_opts() :: keyword()

Socket options to re-arm UDP/TCP listeners and relay sockets after each read.

Uses {active, N} when udp_active_n/0 > 1, else active: :once.

buffer_size()

@spec buffer_size() :: pos_integer()

Per-connection receive/send buffer size in bytes. Default 262_144.

check_rate_limit(client_ip)

@spec check_rate_limit(:inet.ip_address()) :: :ok | {:error, :rate_limited}

Fixed-window request counter for one client IP.

Intended for control-plane requests only. Do not apply this to relayed media: a request-shaped budget is exhausted in seconds at packet rates.

Each IP holds one row (window index + count), so check and update are O(1).

Parameters

  • client_ip - peer address used as the ETS key

    iex> Xirsys.Sockets.Config.check_rate_limit({203, 0, 113, 1}) :ok

get(key, default \\ nil)

@spec get(atom(), any()) :: any()

Looks up key with host-app precedence.

Parameters

  • key - atom stored under :xturn_sockets or the host :config_app

  • default - returned when neither application defines key

    iex> Xirsys.Sockets.Config.get(:absent_doctest_key, :fallback) :fallback

listener_buffer_size()

@spec listener_buffer_size() :: pos_integer()

Buffer size for shared listener sockets (UDP listen, TCP accept).

Defaults to 4_194_304 so the kernel queue can absorb bursts while workers drain. Relay sockets set their own buffers in Transport.UDP.open_relay/2.

max_udp_sessions()

@spec max_udp_sessions() :: pos_integer()

Maximum concurrent per-peer UDP sessions. Default 100_000.

rate_limit_enabled?()

@spec rate_limit_enabled?() :: boolean()

Whether check_rate_limit/1 is armed. Default true.

reorder_opts(name, opts)

@spec reorder_opts(
  atom() | nil,
  keyword()
) :: keyword()

Merged reorder tunables for a named tier.

Precedence (lowest to highest): library defaults, :xturn_sockets :reorder config, host :config_app :reorder config, explicit keys in opts.

Parameters

  • name - tier lookup key (e.g. :rtp), or nil for library defaults only

  • opts - explicit overrides (:enabled, :window, :max_delay_ms, :on_overflow)

    iex> opts = Xirsys.Sockets.Config.reorder_opts(nil, []) iex> opts[:window] 16 iex> opts[:enabled] true iex> opts[:on_overflow] :flush_oldest

server_ip6()

@spec server_ip6() :: :inet.ip_address()

Advertised IPv6 bind address. Default {0, 0, 0, 0, 0, 0, 0, 0}.

server_ip()

@spec server_ip() :: :inet.ip_address()

Advertised IPv4 bind address. Default {0, 0, 0, 0}.

server_local_ip6()

@spec server_local_ip6() :: :inet.ip_address()

Local IPv6 address used when sockname/1 is unavailable. Default {0, 0, 0, 0, 0, 0, 0, 0}.

server_local_ip()

@spec server_local_ip() :: :inet.ip_address()

Local IPv4 address used when sockname/1 is unavailable. Default {0, 0, 0, 0}.

ssl_handshake_timeout()

@spec ssl_handshake_timeout() :: pos_integer()

TLS/DTLS handshake timeout in milliseconds. Default 10_000.

tier_pool_size()

@spec tier_pool_size() :: pos_integer()

Default :pool dispatch size when a tier omits :pool_size. Falls back to System.schedulers_online/0.

udp_active_n()

@spec udp_active_n() :: pos_integer()

UDP {active, N} batch size. 1 means active: :once. Default 32.

udp_session_idle_ms()

@spec udp_session_idle_ms() :: pos_integer()

Idle lifetime for per-peer UDP sessions, in milliseconds. Default 30_000.

udp_session_sweep_ms()

@spec udp_session_sweep_ms() :: pos_integer()

Interval for sweeping idle UDP sessions, in milliseconds. Default 5_000.