11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
17PROMEKI_NAMESPACE_BEGIN
43class AbstractSocket :
public IODevice {
44 PROMEKI_OBJECT(AbstractSocket, IODevice)
49 static constexpr unsigned int DefaultReceiveTimeoutMs = 5000;
54 static constexpr unsigned int DefaultSendTimeoutMs = 5000;
78 AbstractSocket(SocketType type, ObjectBase *parent =
nullptr);
81 virtual ~AbstractSocket();
84 SocketType socketType()
const {
return _type; }
87 SocketState state()
const {
return _state; }
97 Error bind(
const SocketAddress &address);
109 Error connectToHost(
const SocketAddress &address);
117 void disconnectFromHost();
120 SocketAddress localAddress()
const {
return _localAddress; }
123 SocketAddress peerAddress()
const {
return _peerAddress; }
130 Error waitForConnected(
unsigned int timeoutMs = 0);
136 int socketDescriptor()
const {
return _fd; }
146 void setSocketDescriptor(
int fd);
166 Error setReceiveTimeout(
unsigned int timeoutMs);
186 Error setSendTimeout(
unsigned int timeoutMs);
195 Error setSocketOption(
int level,
int option,
int value);
203 Result<int> socketOption(
int level,
int option)
const;
209 bool isSequential()
const override {
return true; }
225 bool waitForReadyRead(
unsigned int timeoutMs = 0)
override;
228 PROMEKI_SIGNAL(connected);
231 PROMEKI_SIGNAL(disconnected);
234 PROMEKI_SIGNAL(stateChanged, SocketState);
246 Error setNonBlocking(
bool enable);
256 Error createSocket(
int domain,
int type,
int protocol = 0);
271 void updateLocalAddress();
277 void setState(SocketState state);
280 SocketState _state = Unconnected;
282 SocketAddress _localAddress;
283 SocketAddress _peerAddress;