annotate C++/SocketAddress.h @ 188:ce3e1c3d6fed

Update sockets to style and using instead of typedef
author David Demelier <markand@malikania.fr>
date Tue, 26 Nov 2013 20:32:43 +0100
parents 18ad49172e6c
children 3c12f0e8bbb9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * SocketAddress.h -- socket addresses management
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013, David Demelier <markand@malikania.fr>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _SOCKET_ADDRESS_H_
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _SOCKET_ADDRESS_H_
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include "Socket.h"
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
173
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
24 /**
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
25 * @class SocketAddress
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
26 * @brief base class for socket addresses
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
27 *
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
28 * This class is mostly used to bind, connect or getting information
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
29 * on socket clients.
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
30 *
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
31 * @see BindAddressIP
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
32 * @see ConnectAddressIP
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
33 * @see AddressUnix
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
34 */
188
ce3e1c3d6fed Update sockets to style and using instead of typedef
David Demelier <markand@malikania.fr>
parents: 173
diff changeset
35 class SocketAddress {
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 protected:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 sockaddr_storage m_addr;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 socklen_t m_addrlen;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 public:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 // Friends.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 friend class Socket;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 * Default constructor.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 SocketAddress();
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 * Constructor with address and size.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 * @param addr the address
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * @param length the address length
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 SocketAddress(const sockaddr_storage &addr, socklen_t length);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * Default destructor.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 virtual ~SocketAddress();
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 * Get the address length
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * @return the length
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 socklen_t length() const;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * Get the address.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * @return the address
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 const sockaddr_storage &address() const;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 };
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 * @class BindAddressIP
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * @brief internet protocol bind class
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 * Create a bind address for internet protocol,
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 * IPv4 or IPv6.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 */
188
ce3e1c3d6fed Update sockets to style and using instead of typedef
David Demelier <markand@malikania.fr>
parents: 173
diff changeset
84 class BindAddressIP : public SocketAddress {
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 private:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 std::string m_host;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 int m_family;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 unsigned m_port;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
89
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 public:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * Create a bind end point.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 * @param addr the interface to bind
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 * @param port the port
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 * @param family AF_INET or AF_INET6
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 BindAddressIP(const std::string &addr, unsigned port, int family);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 };
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 * @class ConnectAddressIP
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 * @brief internet protocol connect class
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 * Create a connect address for internet protocol,
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 * using getaddrinfo(3).
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 */
188
ce3e1c3d6fed Update sockets to style and using instead of typedef
David Demelier <markand@malikania.fr>
parents: 173
diff changeset
109 class ConnectAddressIP : public SocketAddress {
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 public:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 * Create a connect end point.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 * @param host the hostname
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 * @param port the port
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 * @param family AF_INET, AF_INET6, ...
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 * @param type of socket SOCK_STREAM, SOCK_DGRAM, ...
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 ConnectAddressIP(const std::string &host, unsigned port, int family, int type = SOCK_STREAM);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 };
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
173
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
123 #if !defined(_WIN32)
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
124
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
125 /**
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
126 * @class AddressUnix
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
127 * @brief unix family sockets
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
128 *
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
129 * Create an address to a specific path. Only available on Unix.
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
130 */
188
ce3e1c3d6fed Update sockets to style and using instead of typedef
David Demelier <markand@malikania.fr>
parents: 173
diff changeset
131 class AddressUnix : public SocketAddress {
173
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
132 public:
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
133 /**
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
134 * Construct an address to a path.
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
135 *
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
136 * @param path the path
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
137 * @param rm remove the file before (default: false)
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
138 */
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
139 AddressUnix(const std::string &path, bool rm = false);
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
140 };
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
141
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
142 #endif // ! !_WIN32
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
143
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 #endif // !_SOCKET_ADDRESS_H_