Mercurial > code
comparison C++/SocketTcp.h @ 315:c9356cb38c86
Split sockets into SocketTcp and SocketUdp
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 02 Mar 2015 14:00:48 +0100 |
parents | |
children | 4c0af1143fc4 |
comparison
equal
deleted
inserted
replaced
314:4c3019385769 | 315:c9356cb38c86 |
---|---|
1 /* | |
2 * SocketTcp.h -- portable C++ socket wrappers | |
3 * | |
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #ifndef _SOCKET_TCP_NG_3_H_ | |
20 #define _SOCKET_TCP_NG_3_H_ | |
21 | |
22 #include "Socket.h" | |
23 | |
24 /** | |
25 * @class SocketAbstractTcp | |
26 * @brief Base class for TCP sockets | |
27 */ | |
28 class SocketAbstractTcp : public Socket { | |
29 public: | |
30 using Socket::Socket; | |
31 | |
32 inline SocketAbstractTcp(int domain, int protocol) | |
33 : Socket(domain, SOCK_STREAM, protocol) | |
34 { | |
35 } | |
36 | |
37 void listen(int max = 128); | |
38 | |
39 inline std::string recv(unsigned count) | |
40 { | |
41 std::string result; | |
42 | |
43 result.resize(count); | |
44 auto n = recv(const_cast<char *>(result.data()), count); | |
45 result.resize(n); | |
46 | |
47 return result; | |
48 } | |
49 | |
50 inline unsigned send(const std::string &data) | |
51 { | |
52 return send(data.c_str(), data.size()); | |
53 } | |
54 | |
55 virtual unsigned recv(void *data, unsigned length) = 0; | |
56 | |
57 virtual unsigned send(const void *data, unsigned length) = 0; | |
58 }; | |
59 | |
60 /** | |
61 * @class SocketTcp | |
62 * @brief End-user class for TCP sockets | |
63 */ | |
64 class SocketTcp final : public SocketAbstractTcp { | |
65 public: | |
66 using SocketAbstractTcp::SocketAbstractTcp; | |
67 using SocketAbstractTcp::recv; | |
68 using SocketAbstractTcp::send; | |
69 | |
70 SocketTcp accept(); | |
71 | |
72 SocketTcp accept(SocketAddress &info); | |
73 | |
74 void connect(const SocketAddress &address); | |
75 | |
76 unsigned recv(void *data, unsigned length) override; | |
77 | |
78 unsigned send(const void *data, unsigned length) override; | |
79 }; | |
80 | |
81 #endif // !_SOCKET_TCP_NG_3_H_ |