Xirsys.Sockets.Transport.TCP (xturn_sockets v2.2.1)

View Source

Plain TCP transport (:gen_tcp) for TURN-over-TCP and outbound clients.

What problem this solves

TURN can run over TCP (pt.4 of RFC 5766 / RFC 8656). Stream transports need listen/accept, byte-oriented reads, and normalized {:tcp, ...} messages for the shared drain engine. This module implements the Transport behaviour on top of :gen_tcp, including optional outbound connect/3.

IPv6 listen sockets on Linux set ipv6_v6only.

RFCs

Summary

Functions

Connects to {ip, port} with a 5 second timeout.

Maps :tcp / :tcp_closed / :tcp_error messages.

Functions

connect(ip, port, opts \\ [])

Connects to {ip, port} with a 5 second timeout.

Parameters

  • ip - destination address
  • port - destination port
  • opts - extra :gen_tcp.connect/4 options merged after defaults

handle_message(arg1, socket)

Maps :tcp / :tcp_closed / :tcp_error messages.

iex> Xirsys.Sockets.Transport.TCP.handle_message({:tcp, :port, "hi"}, :sock)
{:data, "hi", nil}
iex> Xirsys.Sockets.Transport.TCP.handle_message({:tcp_closed, :port}, :sock)
{:closed, :normal}
iex> Xirsys.Sockets.Transport.TCP.handle_message({:tcp_error, :port, :econnreset}, :sock)
{:closed, :econnreset}
iex> Xirsys.Sockets.Transport.TCP.handle_message(:other, :sock)
:ignore
iex> Xirsys.Sockets.Transport.TCP.framing()
:stream