Make.TransportSourceA flow is a network connection initialized by T.connect
io is the type of an effect. 'err is a polymorphic variant.
An address for a given flow type, usually this will consist of IP address + a TCP/IP or UDP/IP port number, but for some flow types it can carry additional information for purposes of cryptographic verification. TODO at least that would be nice in the future. TODO
TODO well this is kind of crude; it's a tuple to prevent having to do endless amounts of currying things when implementing flow types, and we need to know the protocol used so we can prefix packets for DNS-over-TCP and set correct socket options etc. therefore we can't just use the opaque io_addr. TODO
A stack with which to connect, e.g. IPv4.tcpv4
The abstract state of a DNS client.
create ~rng ~nameserver stack creates the state record of the DNS client.
The address of a nameserver that is supposed to work with the underlying flow, can be used if the user does not want to bother with configuring their own.
connect addr is a new connection (flow) to addr, or an error.
send flow buffer sends buffer to the flow upstream.
recv flow tries to read a buffer from the flow downstream.