Socket.TCP (socket2 v2.1.2)

Copy Markdown

This module wraps a passive TCP socket using gen_tcp.

Options

When creating a socket you can pass a series of options to use for it.

  • :as sets the kind of value returned by recv, either :binary or :list, the default is :binary
  • :mode can be either :passive or :active, default is :passive
  • :local must be a keyword list
    • :address the local address to use
    • :port the local port to use
    • :fd an already opened file descriptor to use
  • :backlog sets the listen backlog
  • :watermark must be a keyword list
    • :low defines the :low_watermark, see inet:setopts
    • :high defines the :high_watermark, see inet:setopts
  • :version sets the IP version to use
  • :options must be a list of atoms or tuples:
    • :keepalive sets SO_KEEPALIVE
    • :nodelay sets TCP_NODELAY
    • :defer_accept sets TCP_DEFER_ACCEPT
    • {:defer_accept, seconds} set TCP_DEFER_ACCEPT with the given seconds defer time
    • :fast_open enables tcp fast open (TFO) on the socket
    • {:fast_open, queue_len} enables TFO with the given queue_len
    • :fast_open_connect enables tcp fast open connect (TFO) on the socket
  • :packet see inet:setopts
  • :size sets the max length of the packet body, see inet:setopts

Examples

server = Socket.TCP.listen!(1337, packet: :line)

client = server |> Socket.accept!
client |> Socket.Stream.send!(client |> Socket.Stream.recv!)
client |> Socket.Stream.close

Summary

Functions

Accept a new client from a listening socket, optionally passing options.

Accept a new client from a listening socket, optionally passing options, raising if an error occurs.

Convert TCP options to :inet.setopts compatible arguments.

Create a TCP socket connecting to the given host and port tuple.

Create a TCP socket connecting to the given host and port tuple and options, or to the given host and port.

Create a TCP socket connecting to the given host and port.

Create a TCP socket connecting to the given host and port tuple, raising if an error occurs.

Create a TCP socket connecting to the given host and port tuple and options, or to the given host and port, raising if an error occurs.

Create a TCP socket connecting to the given host and port, raising in case of error.

Return a proper error string for the given code or nil if it can't be converted.

Create a TCP socket listening on an OS chosen port, use local to know the port it was bound on.

Create a TCP socket listening on an OS chosen port using the given options or listening on the given port.

Create a TCP socket listening on the given port and using the given options.

Create a TCP socket listening on an OS chosen port, use local to know the port it was bound on, raising in case of error.

Create a TCP socket listening on an OS chosen port using the given options or listening on the given port, raising in case of error.

Create a TCP socket listening on the given port and using the given options, raising in case of error.

Set options of the socket.

Set options of the socket, raising if an error occurs.

Set the process which will receive the messages.

Set the process which will receive the messages, raising if an error occurs.

Types

error()

@type error() :: nil | String.t()

t()

@opaque t()

Functions

accept(socket, options \\ [])

@spec accept(t() | port(), Keyword.t()) :: {:ok, t()} | {:error, Error.t()}

Accept a new client from a listening socket, optionally passing options.

accept!(self)

@spec accept!(t()) :: t() | no_return()

Accept a new client from a listening socket, optionally passing options, raising if an error occurs.

accept!(self, options)

@spec accept!(t(), Keyword.t()) :: t() | no_return()

arguments(options)

@spec arguments(Keyword.t()) :: list()

Convert TCP options to :inet.setopts compatible arguments.

connect(arg)

@spec connect({Socket.Address.t(), :inet.port_number()}) ::
  {:ok, t()} | {:error, Socket.Error.t()}

Create a TCP socket connecting to the given host and port tuple.

connect(address, options)

@spec connect(
  {Socket.Address.t(), :inet.port_number()} | Socket.Address.t(),
  Keyword.t() | :inet.port_number()
) :: {:ok, t()} | {:error, Socket.Error.t()}

Create a TCP socket connecting to the given host and port tuple and options, or to the given host and port.

connect(address, port, options)

@spec connect(String.t() | :inet.ip_address(), :inet.port_number(), Keyword.t()) ::
  {:ok, t()} | {:error, Socket.Error.t()}

Create a TCP socket connecting to the given host and port.

connect!(descriptor)

@spec connect!({Socket.Address.t(), :inet.port_number()}) :: t() | no_return()

Create a TCP socket connecting to the given host and port tuple, raising if an error occurs.

connect!(address, port)

Create a TCP socket connecting to the given host and port tuple and options, or to the given host and port, raising if an error occurs.

connect!(address, port, options)

@spec connect!(String.t() | :inet.ip_address(), :inet.port_number(), Keyword.t()) ::
  t() | no_return()

Create a TCP socket connecting to the given host and port, raising in case of error.

error(code)

@spec error(term()) :: String.t()

Return a proper error string for the given code or nil if it can't be converted.

listen()

@spec listen() :: {:ok, t()} | {:error, Socket.Error.t()}

Create a TCP socket listening on an OS chosen port, use local to know the port it was bound on.

listen(port)

@spec listen(:inet.port_number() | Keyword.t()) ::
  {:ok, t()} | {:error, Socket.Error.t()}

Create a TCP socket listening on an OS chosen port using the given options or listening on the given port.

listen(port, options)

@spec listen(:inet.port_number(), Keyword.t()) ::
  {:ok, t()} | {:error, Socket.Error.t()}

Create a TCP socket listening on the given port and using the given options.

listen!()

@spec listen!() :: t() | no_return()

Create a TCP socket listening on an OS chosen port, use local to know the port it was bound on, raising in case of error.

listen!(port_or_options)

@spec listen!(:inet.port_number() | Keyword.t()) :: t() | no_return()

Create a TCP socket listening on an OS chosen port using the given options or listening on the given port, raising in case of error.

listen!(port, options)

@spec listen!(:inet.port_number(), Keyword.t()) :: t() | no_return()

Create a TCP socket listening on the given port and using the given options, raising in case of error.

options(socket, options)

@spec options(t() | Socket.SSL.t() | port(), Keyword.t()) ::
  :ok | {:error, Socket.Error.t()}

Set options of the socket.

options!(socket, options)

@spec options!(t() | Socket.SSL.t() | port(), Keyword.t()) :: :ok | no_return()

Set options of the socket, raising if an error occurs.

process(socket, pid)

@spec process(t(), pid()) :: :ok | {:error, :closed | :not_owner | Error.t()}

Set the process which will receive the messages.

process!(socket, pid)

@spec process!(t() | port(), pid()) :: :ok | no_return()

Set the process which will receive the messages, raising if an error occurs.