1 #ifndef MSP_NET_SOCKET_H_
2 #define MSP_NET_SOCKET_H_
5 #include <msp/core/except.h>
6 #include <msp/io/eventobject.h>
7 #include <msp/io/handle.h>
8 #include "mspnet_api.h"
14 class MSPNET_API bad_socket_state: public invalid_state
17 bad_socket_state(const std::string &w): invalid_state(w) { }
21 class MSPNET_API Socket: public IO::EventObject
27 S_INPUT = IO::P_INPUT,
34 std::unique_ptr<Private> priv;
35 std::unique_ptr<SockAddr> local_addr;
37 Socket(const Private &);
38 Socket(Family, int, int);
41 void platform_cleanup();
45 void set_block(bool) override;
46 void set_inherit(bool) override;
47 const IO::Handle &get_handle(IO::Mode) override;
48 const IO::Handle &get_event_handle() override;
50 /** Associates the socket with a local address. There must be no existing
51 users of the address. */
52 void bind(const SockAddr &);
54 bool is_bound() const { return static_cast<bool>(local_addr); }
55 const SockAddr &get_local_address() const;
57 void set_timeout(const Time::TimeDelta &);
59 void set_socket_events(unsigned);
60 void set_platform_events(unsigned);