Listens for new network connections.
The following program creates an echo server that listens for connections on port 8989 and echoes back any data it receives.
use "net"
class MyTCPConnectionNotify is TCPConnectionNotify
fun ref received(
conn: TCPConnection ref,
data: Array[U8] iso,
times: USize)
: Bool
=>
conn.write(String.from_array(consume data))
true
fun ref connect_failed(conn: TCPConnection ref) =>
None
class MyTCPListenNotify is TCPListenNotify
fun ref connected(listen: TCPListener ref): TCPConnectionNotify iso^ =>
MyTCPConnectionNotify
fun ref not_listening(listen: TCPListener ref) =>
None
actor Main
new create(env: Env) =>
try
TCPListener(env.root as AmbientAuth,
recover MyTCPListenNotify end, "", "8989")
end
actor tag TCPListener
Listens for both IPv4 and IPv6 connections.
new tag create(
auth: (AmbientAuth val | NetAuth val | TCPAuth val |
TCPListenAuth val),
notify: TCPListenNotify iso,
host: String val = "",
service: String val = "0",
limit: USize val = 0,
read_buffer_size: USize val = 16384,
yield_after_reading: USize val = 16384,
yield_after_writing: USize val = 16384)
: TCPListener tag^
Listens for IPv4 connections.
new tag ip4(
auth: (AmbientAuth val | NetAuth val | TCPAuth val |
TCPListenAuth val),
notify: TCPListenNotify iso,
host: String val = "",
service: String val = "0",
limit: USize val = 0,
read_buffer_size: USize val = 16384,
yield_after_reading: USize val = 16384,
yield_after_writing: USize val = 16384)
: TCPListener tag^
Listens for IPv6 connections.
new tag ip6(
auth: (AmbientAuth val | NetAuth val | TCPAuth val |
TCPListenAuth val),
notify: TCPListenNotify iso,
host: String val = "",
service: String val = "0",
limit: USize val = 0,
read_buffer_size: USize val = 16384,
yield_after_reading: USize val = 16384,
yield_after_writing: USize val = 16384)
: TCPListener tag^
Change the notifier.
be set_notify( notify: TCPListenNotify iso)
Stop listening.
be dispose()
Return the bound IP address.
fun box local_address() : NetAddress val
Dispose of resources.
fun ref close() : None val
When we are readable, we accept new connections until none remain.
be _event_notify( event: Pointer[AsioEvent val] tag, flags: U32 val, arg: U32 val)
An accepted connection has closed. If we have dropped below the limit, try to accept new connections.
be _conn_closed()
Accept connections as long as we have spawned fewer than our limit.
fun ref _accept( ns: U32 val = 0) : None val
Spawn a new connection.
fun ref _spawn( ns: U32 val) : None val
Inform the notifier that we're listening.
fun ref _notify_listening() : None val
© 2016-2018, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/net-TCPListener