libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
abstractsocket.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/iodevice.h>
14#include <promeki/error.h>
16
17PROMEKI_NAMESPACE_BEGIN
18
43class AbstractSocket : public IODevice {
44 PROMEKI_OBJECT(AbstractSocket, IODevice)
45 public:
49 static constexpr unsigned int DefaultReceiveTimeoutMs = 5000;
50
54 static constexpr unsigned int DefaultSendTimeoutMs = 5000;
55
57 enum SocketType {
58 TcpSocketType,
59 UdpSocketType,
60 RawSocketType
61 };
62
64 enum SocketState {
65 Unconnected,
66 Connecting,
67 Connected,
68 Bound,
69 Closing,
70 Listening
71 };
72
78 AbstractSocket(SocketType type, ObjectBase *parent = nullptr);
79
81 virtual ~AbstractSocket();
82
84 SocketType socketType() const { return _type; }
85
87 SocketState state() const { return _state; }
88
97 Error bind(const SocketAddress &address);
98
109 Error connectToHost(const SocketAddress &address);
110
117 void disconnectFromHost();
118
120 SocketAddress localAddress() const { return _localAddress; }
121
123 SocketAddress peerAddress() const { return _peerAddress; }
124
130 Error waitForConnected(unsigned int timeoutMs = 0);
131
136 int socketDescriptor() const { return _fd; }
137
146 void setSocketDescriptor(int fd);
147
166 Error setReceiveTimeout(unsigned int timeoutMs);
167
186 Error setSendTimeout(unsigned int timeoutMs);
187
195 Error setSocketOption(int level, int option, int value);
196
203 Result<int> socketOption(int level, int option) const;
204
209 bool isSequential() const override { return true; }
210
225 bool waitForReadyRead(unsigned int timeoutMs = 0) override;
226
228 PROMEKI_SIGNAL(connected);
229
231 PROMEKI_SIGNAL(disconnected);
232
234 PROMEKI_SIGNAL(stateChanged, SocketState);
235
246 Error setNonBlocking(bool enable);
247
248 protected:
256 Error createSocket(int domain, int type, int protocol = 0);
257
263 void closeSocket();
264
271 void updateLocalAddress();
272
277 void setState(SocketState state);
278
279 int _fd = -1;
280 SocketState _state = Unconnected;
281 SocketType _type;
282 SocketAddress _localAddress;
283 SocketAddress _peerAddress;
284};
285
286PROMEKI_NAMESPACE_END
287
288#endif // PROMEKI_ENABLE_NETWORK