+public:
+ ~Socket();
+
+ void set_block(bool);
+ const IO::Handle &get_event_handle();
+
+ bool is_connected() const { return connected; }
+
+ /** Associates the socket with a local address. There must be no existing
+ users of the address. */
+ void bind(const SockAddr &);
+
+ /** Connects to a remote address. Exact semantics depend on the socket
+ type. */
+ virtual int connect(const SockAddr &) = 0;
+
+ /// Closes the socket. Most operations will throw an exception after this.
+ void close();
+
+ void set_timeout(const Time::TimeDelta &);
+ const SockAddr &get_local_address() const;
+ const SockAddr &get_peer_address() const;
+protected: