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 accept
ing 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