]> git.tdb.fi Git - libs/net.git/blob - source/net/socket.h
Use default member initializers where possible
[libs/net.git] / source / net / socket.h
1 #ifndef MSP_NET_SOCKET_H_
2 #define MSP_NET_SOCKET_H_
3
4 #include <msp/core/except.h>
5 #include <msp/io/eventobject.h>
6 #include <msp/io/handle.h>
7 #include "constants.h"
8 #include "sockaddr.h"
9
10 namespace Msp {
11 namespace Net {
12
13 class bad_socket_state: public invalid_state
14 {
15 public:
16         bad_socket_state(const std::string &w): invalid_state(w) { }
17 };
18
19
20 class Socket: public IO::EventObject
21 {
22 protected:
23         enum SocketEvent
24         {
25                 S_NONE = IO::P_NONE,
26                 S_INPUT = IO::P_INPUT,
27                 S_CONNECT = 4096,
28                 S_ACCEPT = 8192
29         };
30
31         struct Private;
32
33         Private *priv = 0;
34         SockAddr *local_addr = 0;
35
36         Socket(const Private &);
37         Socket(Family, int, int);
38 private:
39         void platform_init();
40         void platform_cleanup();
41 public:
42         ~Socket();
43
44         void set_block(bool) override;
45         void set_inherit(bool) override;
46         const IO::Handle &get_handle(IO::Mode);
47         const IO::Handle &get_event_handle() override;
48
49         /** Associates the socket with a local address.  There must be no existing
50         users of the address. */
51         void bind(const SockAddr &);
52
53         bool is_bound() const { return local_addr; }
54         const SockAddr &get_local_address() const;
55
56         void set_timeout(const Time::TimeDelta &);
57 protected:
58         void set_socket_events(unsigned);
59         void set_platform_events(unsigned);
60 };
61
62 } // namespace Net
63 } // namespace Msp
64
65 #endif