6 #include <netinet/in.h>
10 constexpr size_t size_t_max = numeric_limits<size_t>::max();
12 class thread_exit_exception : exception {};
16 class connection_delegate {
18 virtual bool got_pdu(const shared_ptr<connection> & c, const string & b) = 0;
19 virtual ~connection_delegate() {}
22 class connection : private aio_callback, public enable_shared_from_this<connection> {
24 connection(connection_delegate * delegate, socket_t && f1, int lossytest=0);
27 bool isdead() { return dead_; }
29 bool send(const string & b);
31 static shared_ptr<connection> to_dst(const sockaddr_in & dst, connection_delegate *mgr, int lossy=0);
33 const time_point<steady_clock> create_time = steady_clock::now();
43 connection_delegate * delegate_;
48 size_t solong = 0; // number of bytes written or read so far
62 class connection_listener : private aio_callback {
64 connection_listener(connection_delegate * delegate, in_port_t port, int lossytest=0);
65 ~connection_listener();
66 inline in_port_t port() { return port_; }
74 socket_t tcp_; // listens for connections
75 connection_delegate * delegate_;
77 map<int, shared_ptr<connection>> conns_;