glisten/internal/acceptor

Types

pub type AcceptorError {
  AcceptError(socket.SocketReason)
  HandlerError(actor.StartError)
  ControlError(atom.Atom)
}

Constructors

pub type AcceptorMessage {
  AcceptConnection(socket.ListenSocket)
}

Constructors

pub type AcceptorState {
  AcceptorState(
    sender: process.Subject(AcceptorMessage),
    socket: option.Option(socket.Socket),
    transport: transport.Transport,
  )
}

Constructors

pub type Pool(data, user_message) {
  Pool(
    handler: fn(
      data,
      handler.LoopMessage(user_message),
      handler.Connection(user_message),
    ) -> handler.Next(data, handler.LoopMessage(user_message)),
    pool_count: Int,
    name: process.Name(
      factory_supervisor.Message(
        socket.Socket,
        process.Subject(handler.Message(user_message)),
      ),
    ),
    on_init: fn(handler.Connection(user_message)) -> #(
      data,
      option.Option(process.Selector(user_message)),
    ),
    on_close: option.Option(fn(data) -> Nil),
    transport: transport.Transport,
    active_state: options.ActiveState,
  )
}

Constructors

Values

pub fn start(
  pool: Pool(data, user_message),
  listener_name: process.Name(listener.Message),
  connection_supervisor: process.Name(
    factory_supervisor.Message(
      socket.Socket,
      process.Subject(handler.Message(user_message)),
    ),
  ),
) -> Result(
  actor.Started(process.Subject(AcceptorMessage)),
  actor.StartError,
)

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

pub fn start_pool(
  pool: Pool(data, user_message),
  transport: transport.Transport,
  port: Int,
  options: List(options.TcpOption),
  listener_name: process.Name(listener.Message),
) -> Result(
  actor.Started(static_supervisor.Supervisor),
  actor.StartError,
)

Starts a pool of acceptors of size pool_count.

Runs loop_fn on ever message received

✨ Search Document