annotate C++/Socket.h @ 181:08af4f99c104

Update drivers a bit
author David Demelier <markand@malikania.fr>
date Tue, 29 Oct 2013 21:32:05 +0100
parents 73d8f140bc86
children ce3e1c3d6fed
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 * Socket.h -- portable C++ socket wrappers
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_H_
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _SOCKET_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 <exception>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <memory>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <string>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #if defined(_WIN32)
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 # include <WinSock2.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # include <WS2tcpip.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #else
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 # include <sys/ioctl.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 # include <sys/socket.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 # include <sys/types.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 # include <arpa/inet.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 # include <netinet/in.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 # include <fcntl.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 # include <netdb.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 # include <unistd.h>
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 # define ioctlsocket(s, p, a) ::ioctl(s, p, a)
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 # define closesocket(s) ::close(s)
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 # define gai_strerrorA gai_strerror
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 # define INVALID_SOCKET -1
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 # define SOCKET_ERROR -1
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 #endif
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 class SocketAddress;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * @class SocketError
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * @brief socket error reporting
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 * This class is mainly used in all socket operations that may fail.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 class SocketError : public std::exception
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 {
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 private:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 std::string m_error;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 public:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 SocketError(const std::string &error);
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 virtual const char * what(void) const throw();
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 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * @class Socket
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * @brief socket abstraction
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 * This class is a big wrapper around sockets functions but portable,
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 * there is some functions that helps for getting error reporting.
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 class Socket
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 {
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 public:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 #if defined(_WIN32)
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 typedef SOCKET Type;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 typedef const char * ConstArg;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 typedef char * Arg;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 #else
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 typedef int Type;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 typedef const void * ConstArg;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 typedef void * Arg;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 #endif
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
89
175
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
90 private:
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 Socket::Type m_socket;
175
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
92 int m_domain;
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
93 int m_type;
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
94 int m_protocol;
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
95
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 public:
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * To be called before any socket operation.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 static void init();
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 * Get the last socket system error.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 * @return a string message
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 static std::string getLastSysError();
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
108
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 * To be called before exiting.
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 static void finish();
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 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 * Default constructor.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 Socket();
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
118
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 * Constructor to create a new socket.
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 * @param domain the domain
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 * @param type the type
173
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
124 * @param protocol the protocol
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 */
173
18ad49172e6c Update documentation and add Unix sockets
David Demelier <markand@malikania.fr>
parents: 170
diff changeset
127 Socket(int domain, int type, int protocol);
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 * Get the socket.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 * @return the socket
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 Type getSocket() const;
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
135
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 /**
175
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
137 * Get the domain.
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
138 *
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
139 * @return the domain
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
140 */
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
141 int getDomain() const;
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
142
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
143 /**
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
144 * Get the type of socket.
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
145 *
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
146 * @return the type
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
147 */
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
148 int getType() const;
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
149
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
150 /**
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
151 * Get the protocol.
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
152 *
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
153 * @return the protocol
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
154 */
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
155 int getProtocol() const;
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
156
73d8f140bc86 Add some getters
David Demelier <markand@malikania.fr>
parents: 174
diff changeset
157 /**
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 * Set an option for the socket.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 * @param level the setting level
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 * @param name the name
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 * @param arg the value
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 * @param argLen the argument length
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 void set(int level, int name, const void *arg, unsigned argLen);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
167
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 * Enable or disable blocking mode.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 * @param block the mode
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 void blockMode(bool block = true);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
174
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 * Bind the socket.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 * @param location a IP or Unix location
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 * @throw SocketError error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 void bind(const SocketAddress &address);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 * Try to connect to the specific address
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 * @param addr the address
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 void connect(const SocketAddress &address);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 * Accept a client without getting its info.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 * @return a client ready to use
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 Socket accept();
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 * Accept a client.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 * @param info the optional client info
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 * @return a client ready to use
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 Socket accept(SocketAddress &info);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
207
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 * Listen to a specific number of pending connections.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 * @param max the max number of clients
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 void listen(int max);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
215
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 * Receive some data.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 * @param data the destination pointer
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 * @param dataLen max length to receive
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 * @return the number of bytes received
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 unsigned recv(void *data, unsigned dataLen);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
225
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 * Send some data.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 * @param data the data to send
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 * @param dataLen the data length
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 * @return the number of bytes sent
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 unsigned send(const void *data, unsigned dataLen);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
235
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 * Send a message as a string.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 * @param message the message
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 * @return the number of bytes sent
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 unsigned send(const std::string &message);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 * Receive from a connection-less socket without getting
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 * client information.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 * @param data the destination pointer
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 * @param dataLen max length to receive
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 * @return the number of bytes received
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 unsigned recvfrom(void *data, unsigned dataLen);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
255
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 * Receive from a connection-less socket and get the client
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 * information.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 * @param data the destination pointer
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 * @param dataLen max length to receive
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 * @param info the client info
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 * @return the number of bytes received
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 unsigned recvfrom(void *data, unsigned dataLen, SocketAddress &info);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
267
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 * Send some data to a connection-less socket.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 * @param data the data to send
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 * @param dataLen the data length
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 * @param address the address
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 * @return the number of bytes sent
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 unsigned sendto(const void *data, unsigned dataLen, const SocketAddress &info);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
278
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 * Send a message to a connection-less socket.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 *
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 * @param message the message
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 * @param address the address
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 * @return the number of bytes sent
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 * @throw SocketError on error
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 unsigned sendto(const std::string &message, const SocketAddress &info);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
288
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 /**
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 * Close the socket.
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 */
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 void close();
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 };
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
294
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 bool operator==(const Socket &s1, const Socket &s2);
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
296
174
9f22bd478f21 Add operator less because widely used
David Demelier <markand@malikania.fr>
parents: 173
diff changeset
297 bool operator<(const Socket &s, const Socket &s2);
9f22bd478f21 Add operator less because widely used
David Demelier <markand@malikania.fr>
parents: 173
diff changeset
298
170
fd138f2a9773 Add C++ portable sockets
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 #endif // !_SOCKET_H_