annotate C++/modules/Socket/SocketTcp.h @ 334:0b576ee64d45

* Create brand new hierarchy * Rename DynLib to Dynlib * Remove some warnings
author David Demelier <markand@malikania.fr>
date Sun, 08 Mar 2015 14:26:33 +0100
parents C++/SocketTcp.h@cba77da58496
children 92457ea8f7e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * SocketTcp.h -- portable C++ socket wrappers
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr>
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
19 #ifndef _SOCKET_TCP_NG_H_
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
20 #define _SOCKET_TCP_NG_H_
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include "Socket.h"
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 /**
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 * @class SocketAbstractTcp
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 * @brief Base class for TCP sockets
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
27 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
28 * This abstract class provides standard TCP functions for both clear
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
29 * and SSL implementation.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
30 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
31 * It does not contain default accept() and connect() because they varies too
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
32 * much between standard and SSL. Also, the accept() function return different
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
33 * types.
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 */
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 class SocketAbstractTcp : public Socket {
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
36 protected:
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
37 Socket standardAccept(SocketAddress &address);
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
38 void standardConnect(const SocketAddress &address);
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
39
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 public:
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
41 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
42 * Construct an abstract socket from an already made socket.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
43 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
44 * @param s the socket
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
45 */
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
46 inline SocketAbstractTcp(Socket s)
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
47 : Socket(s)
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
48 {
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
49 }
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
51 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
52 * Construct a standard TCP socket. The type is automatically
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
53 * set to SOCK_STREAM.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
54 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
55 * @param domain the domain
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
56 * @param protocol the protocol
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
57 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
58 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 inline SocketAbstractTcp(int domain, int protocol)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 : Socket(domain, SOCK_STREAM, protocol)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
64 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
65 * Listen for pending connection.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
66 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
67 * @param max the maximum number
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
68 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 void listen(int max = 128);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
71 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
72 * Overloaded function.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
73 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
74 * @param count the number of bytes to receive
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
75 * @return the string
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
76 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
77 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 inline std::string recv(unsigned count)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 std::string result;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 result.resize(count);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 auto n = recv(const_cast<char *>(result.data()), count);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 result.resize(n);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 return result;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
89 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
90 * Overloaded function.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
91 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
92 * @param count the number of bytes to receive
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
93 * @param timeout the maximum timeout in milliseconds
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
94 * @return the string
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
95 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
96 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
97 inline std::string waitRecv(unsigned count, int timeout)
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
98 {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
99 std::string result;
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
100
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
101 result.resize(count);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
102 auto n = waitRecv(const_cast<char *>(result.data()), count, timeout);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
103 result.resize(n);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
104
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
105 return result;
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
106 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
107
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
108 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
109 * Overloaded function.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
110 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
111 * @param data the string to send
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
112 * @return the number of bytes sent
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
113 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
114 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 inline unsigned send(const std::string &data)
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 {
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 return send(data.c_str(), data.size());
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 }
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
120 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
121 * Overloaded function.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
122 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
123 * @param data the string to send
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
124 * @param timeout the maximum timeout in milliseconds
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
125 * @return the number of bytes sent
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
126 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
127 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
128 inline unsigned waitSend(const std::string &data, int timeout)
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
129 {
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
130 return waitSend(data.c_str(), data.size(), timeout);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
131 }
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
132
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
133 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
134 * Receive data.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
135 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
136 * @param data the destination buffer
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
137 * @param length the buffer length
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
138 * @return the number of bytes received
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
139 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
140 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 virtual unsigned recv(void *data, unsigned length) = 0;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
142
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
143 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
144 * Receive data.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
145 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
146 * @param data the destination buffer
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
147 * @param length the buffer length
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
148 * @param timeout the maximum timeout in milliseconds
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
149 * @return the number of bytes received
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
150 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
151 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
152 virtual unsigned waitRecv(void *data, unsigned length, int timeout) = 0;
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
153
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
154 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
155 * Send data.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
156 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
157 * @param data the buffer
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
158 * @param length the buffer length
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
159 * @return the number of bytes sent
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
160 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
161 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 virtual unsigned send(const void *data, unsigned length) = 0;
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
163
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
164 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
165 * Send data.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
166 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
167 * @param data the buffer
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
168 * @param length the buffer length
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
169 * @return the number of bytes sent
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
170 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
171 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
172 virtual unsigned waitSend(const void *data, unsigned length, int timeout) = 0;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 };
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
174
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 /**
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 * @class SocketTcp
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 * @brief End-user class for TCP sockets
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 */
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
179 class SocketTcp : public SocketAbstractTcp {
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 public:
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 using SocketAbstractTcp::SocketAbstractTcp;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 using SocketAbstractTcp::recv;
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
183 using SocketAbstractTcp::waitRecv;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 using SocketAbstractTcp::send;
318
68ae6d7dea1f Sockets: improve errors
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
185 using SocketAbstractTcp::waitSend;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
186
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
187 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
188 * Accept a clear TCP socket.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
189 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
190 * @return the socket
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
191 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
192 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 SocketTcp accept();
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
195 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
196 * Accept a clear TCP socket.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
197 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
198 * @param info the client information
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
199 * @return the socket
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
200 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
201 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 SocketTcp accept(SocketAddress &info);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
204 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
205 * Accept a clear TCP socket.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
206 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
207 * @param timeout the maximum timeout in milliseconds
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
208 * @return the socket
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
209 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
210 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
211 SocketTcp waitAccept(int timeout);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
212
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
213 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
214 * Accept a clear TCP socket.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
215 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
216 * @param info the client information
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
217 * @param timeout the maximum timeout in milliseconds
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
218 * @return the socket
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
219 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
220 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
221 SocketTcp waitAccept(SocketAddress &info, int timeout);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
222
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
223 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
224 * Connect to an end point.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
225 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
226 * @param address the address
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
227 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
228 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 void connect(const SocketAddress &address);
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
231 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
232 * Connect to an end point.
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
233 *
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
234 * @param timeout the maximum timeout in milliseconds
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
235 * @param address the address
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
236 * @throw SocketError on error
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
237 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
238 void waitConnect(const SocketAddress &address, int timeout);
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
239
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
240 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
241 * @copydoc SocketAbstractTcp::recv
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
242 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 unsigned recv(void *data, unsigned length) override;
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
245 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
246 * @copydoc SocketAbstractTcp::waitRecv
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
247 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
248 unsigned waitRecv(void *data, unsigned length, int timeout) override;
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
249
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
250 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
251 * @copydoc SocketAbstractTcp::send
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
252 */
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 unsigned send(const void *data, unsigned length) override;
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
254
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
255 /**
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
256 * @copydoc SocketAbstractTcp::waitSend
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
257 */
316
4c0af1143fc4 Add wait operation (no tests yet)
David Demelier <markand@malikania.fr>
parents: 315
diff changeset
258 unsigned waitSend(const void *data, unsigned length, int timeout) override;
315
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 };
c9356cb38c86 Split sockets into SocketTcp and SocketUdp
David Demelier <markand@malikania.fr>
parents:
diff changeset
260
319
cba77da58496 * Finalize SocketSsl
David Demelier <markand@malikania.fr>
parents: 318
diff changeset
261 #endif // !_SOCKET_TCP_NG_H_