7 #include <netinet/in.h>
11 constexpr size_t size_t_max = numeric_limits<size_t>::max();
13 class thread_exit_exception : exception {};
19 virtual bool got_pdu(const shared_ptr<connection> & c, const string & b) = 0;
23 class connection : public aio_callback, public enable_shared_from_this<connection> {
27 size_t solong = 0; // number of bytes written or read so far
30 connection(chanmgr *m1, int f1, int lossytest=0);
33 int channo() { return fd_; }
34 bool isdead() { lock ml(m_); return dead_; }
37 bool send(const string & b);
41 time_point<steady_clock> create_time() const { return create_time_; }
55 time_point<steady_clock> create_time_;
67 tcpsconn(chanmgr *m1, in_port_t port, int lossytest=0);
69 inline in_port_t port() { return port_; }
77 socket_t tcp_; // listens for connections
80 map<int, shared_ptr<connection>> conns_;
82 void process_accept();
86 bundle(chanmgr *m, int s, int l):mgr(m),tcp(s),lossy(l) {}
92 shared_ptr<connection> connect_to_dst(const sockaddr_in &dst, chanmgr *mgr, int lossy=0);