glisten/tcp

Types

pub type Acceptor {
  AcceptConnection(ListenSocket)
}

Constructors

  • AcceptConnection(ListenSocket)
pub type AcceptorError {
  AcceptError
  HandlerError
  ControlError
}

Constructors

  • AcceptError
  • HandlerError
  • ControlError
pub type AcceptorState {
  AcceptorState(sender: Sender(Acceptor), socket: Option(Socket))
}

Constructors

  • AcceptorState(sender: Sender(Acceptor), socket: Option(Socket))
pub type Channel =
  #(Socket, Receiver(Acceptor))
pub type HandlerMessage {
  ReceiveMessage(Charlist)
  Tcp(socket: Port, data: Charlist)
  TcpClosed(Nil)
}

Constructors

  • ReceiveMessage(Charlist)
  • Tcp(socket: Port, data: Charlist)
  • TcpClosed(Nil)
pub opaque type ListenSocket
pub type LoopFn =
  fn(HandlerMessage, Socket) -> actor.Next(Socket)
pub opaque type Socket
pub type SocketReason {
  Closed
  Timeout
}

Constructors

  • Closed
  • Timeout

Options for the TCP socket

pub type TcpOption {
  Backlog(Int)
  Nodelay(Bool)
  Linger(#(Bool, Int))
  SendTimeout(Int)
  SendTimeoutClose(Bool)
  Reuseaddr(Bool)
  Active(Dynamic)
  Binary
}

Constructors

  • Backlog(Int)
  • Nodelay(Bool)
  • Linger(#(Bool, Int))
  • SendTimeout(Int)
  • SendTimeoutClose(Bool)
  • Reuseaddr(Bool)
  • Active(Dynamic)
  • Binary

Functions

pub external fn accept(
  socket: ListenSocket,
) -> Result(Socket, SocketReason)
pub external fn accept_timeout(
  socket: ListenSocket,
  timeout: Int,
) -> Result(Socket, SocketReason)
pub external fn close(socket: Socket) -> Atom
pub external fn do_listen_tcp(
  port: Int,
  options: List(TcpOption),
) -> Result(ListenSocket, SocketReason)
pub external fn do_receive(
  socket: Socket,
  length: Int,
) -> Result(BitString, SocketReason)
pub external fn do_shutdown(socket: Socket, write: Atom) -> Nil
pub fn echo_loop(msg: HandlerMessage, state: AcceptorState) -> Next(
  AcceptorState,
)
pub fn listen(port: Int, options: List(TcpOption)) -> Result(
  ListenSocket,
  SocketReason,
)

Start listening over TCP on a port with the given options

pub fn merge_with_default_options(options: List(TcpOption)) -> List(
  TcpOption,
)
pub fn receive(socket: Socket) -> Result(BitString, SocketReason)
pub fn receive_timeout(socket: Socket, timeout: Int) -> Result(
  BitString,
  SocketReason,
)
pub fn receiver_to_iterator(receiver: Receiver(a)) -> Iterator(a)
pub external fn send(
  socket: Socket,
  packet: Charlist,
) -> Result(Nil, SocketReason)
pub external fn set_opts(
  socket: Socket,
  opts: List(TcpOption),
) -> Result(Nil, Nil)

Update the options for a socket (mutates the socket)

pub fn shutdown(socket: Socket) -> Nil
pub external fn socket_info(socket: Socket) -> Map(a, b)
pub fn start_acceptor(socket: ListenSocket, loop_fn: fn(
    HandlerMessage,
    Socket,
  ) -> Next(Socket)) -> Result(Sender(Acceptor), StartError)

Worker process that handles accepting connections and starts a new process which receives the messages from the socket

pub fn start_acceptor_pool(listener_socket: ListenSocket, handler: fn(
    HandlerMessage,
    Socket,
  ) -> Next(Socket), pool_count: Int) -> Result(Nil, Nil)

Starts a pool of acceptors of size pool_count.

Runs loop_fn on ever message received

pub fn start_handler(socket: Socket, loop: fn(
    HandlerMessage,
    Socket,
  ) -> Next(Socket)) -> Result(Sender(HandlerMessage), StartError)

Starts an actor for the TCP connection