Xirsys.Sockets.Transport behaviour (xturn_sockets v2.0.0)

View Source

Uniform socket I/O behaviour for all wire protocols.

Summary

Types

from()

@type from() :: {ip_address(), port_number()} | nil

ip_address()

@type ip_address() :: :inet.ip_address()

port_number()

@type port_number() :: :inet.port_number()

socket()

@type socket() :: term()

Callbacks

accept(socket, timeout)

@callback accept(socket(), timeout()) :: {:ok, socket()} | {:error, term()}

close(socket)

@callback close(socket()) :: :ok

controlling_process(socket, pid)

(optional)
@callback controlling_process(socket(), pid()) :: :ok | {:error, term()}

framing()

@callback framing() :: :stream | :datagram

ChannelData alignment rule for this transport (RFC 5766, Section 11.5).

  • :stream - outgoing ChannelData MUST be padded to a 4-byte boundary
  • :datagram - padding is optional and omitted on send

handle_message(term, socket)

@callback handle_message(term(), socket()) ::
  {:data, binary(), from()} | {:closed, term()} | :ignore

listen(ip_address, port_number, keyword)

@callback listen(ip_address(), port_number(), keyword()) ::
  {:ok, socket()} | {:error, term()}

peername(socket)

(optional)
@callback peername(socket()) ::
  {:ok, {ip_address(), port_number()}}
  | {:local, binary()}
  | {:unspec, <<_::0>>}
  | {:undefined, any()}
  | {:error, term()}

send(socket, iodata, from)

@callback send(socket(), iodata(), from()) :: :ok | {:error, term()}

setopts(socket, keyword)

@callback setopts(
  socket(),
  keyword()
) :: :ok | {:error, term()}

sockname(socket)

@callback sockname(socket()) ::
  {:ok, {ip_address(), port_number()}}
  | {:local, binary()}
  | {:unspec, <<_::0>>}
  | {:undefined, any()}
  | {:error, term()}