6 #include <netinet/in.h>
10 constexpr size_t size_t_max = numeric_limits<size_t>::max();
14 class connection_delegate {
16 virtual bool got_pdu(const shared_ptr<connection> & c, const string & b) = 0;
17 virtual ~connection_delegate();
20 class connection : private aio_callback, public enable_shared_from_this<connection> {
22 connection(connection_delegate * delegate, socket_t && f1, int lossytest=0);
25 bool isdead() { return dead_; }
27 bool send(const string & b);
29 static shared_ptr<connection> to_dst(const sockaddr_in & dst, connection_delegate *mgr, int lossy=0);
31 const time_point<steady_clock> create_time = steady_clock::now();
41 connection_delegate * delegate_;
46 size_t solong = 0; // number of bytes written or read so far
60 class connection_listener : private aio_callback {
62 connection_listener(connection_delegate * delegate, in_port_t port, int lossytest=0);
63 ~connection_listener();
64 inline in_port_t port() { return port_; }
72 socket_t tcp_; // listens for connections
73 connection_delegate * delegate_;
75 map<int, shared_ptr<connection>> conns_;