3#if !defined( EMSCRIPTEN )
6#include "../Platform/Atomic.h"
11 #include <sys/socket.h>
18 typedef SOCKET Socket;
19 typedef int SocketType;
20 typedef IPPROTO IPProto;
21 #define InvalidSocket INVALID_SOCKET
24 typedef int SocketType;
26 #define InvalidSocket (-1)
37 Family family()
const {
return AF_INET; }
38 virtual SocketType type()
const = 0;
39 virtual IPProto proto()
const = 0;
41 Socket getSocket()
const {
return socket; }
43 void remove() { flags |= cRemove; }
44 void removeAndDelete() { flags |= cRemove | cDelete; }
46 const SockaddrIn& getAddress()
const {
return sockAddr; }
47 int64_t getReconnectTime()
const {
return reconnectTime; }
49 virtual bool isAutoConnectEnabled()
const {
return false; }
50 virtual bool isConnected()
const {
return (socket != InvalidSocket); }
51 bool shouldRemove()
const {
return flags & cRemove; }
52 bool shouldDelete()
const {
return flags & cDelete; }
54 void setNonblocking(
bool val =
true);
55 void setDoNotProcess() { flags |= cDoNotProcess; }
57 virtual bool reconnect() {
return false; }
58 virtual bool disconnect() = 0;
60 bool bind(uint16_t port) {
return bind(
AddrIn((uint32_t)INADDR_ANY), port); }
61 virtual bool bind(
AddrIn ip, uint16_t port);
63 bool send(
const void* data, uint64_t byteCount, uint64_t& bytesSent);
64 bool receive(
void* buffer, uint64_t byteCount, uint64_t& bytesReceived);
66 bool sendTo(
const void *data, uint64_t byteCount, uint64_t &bytesSent,
const SockaddrIn &addr);
67 bool recvFrom(
void* buffer, uint64_t byteCount, uint64_t& bytesReceived,
SockaddrIn &addr);
69 virtual bool processOutgoing() {
return true; }
70 virtual bool processIncoming() {
return true; }
76 Cogs::Atomic< uint32_t > flags = 0;
77 int64_t reconnectTime = 0;
79 static constexpr uint32_t cRemove = 0x00000001;
80 static constexpr uint32_t cDelete = 0x00000002;
81 static constexpr uint32_t cDoNotProcess = 0x00000004;
84 Socket socket = InvalidSocket;
96 SocketType type()
const override {
return SOCK_DGRAM; }
97 IPProto proto()
const override {
return IPPROTO_UDP; }
99 void setMulticastAdapter(
const AddrIn& addr) { multicastAdapter = addr; }
101 virtual bool bind(
AddrIn ip, uint16_t port)
override;
102 virtual bool disconnect()
override;
117 SocketType type()
const override {
return SOCK_STREAM; }
118 IPProto proto()
const override {
return IPPROTO_TCP; }
120 void enableAutoReconnect() { flags |= cAutoReconnect; }
121 void disableAutoReconnect() { flags &= ~cAutoReconnect; }
122 virtual bool isAutoConnectEnabled()
const override {
return (flags & cAutoReconnect) ? true :
false; }
123 virtual bool isConnected()
const override {
return (flags & (cConnected | cListening)) ? true :
false; }
125 void setConnectTimeout(int64_t milliseconds) { connectTimeout = milliseconds; }
126 void setNoDelay(
bool val =
true);
130 virtual bool reconnect()
override;
131 virtual bool disconnect()
override;
133 bool listen(uint16_t port) {
return listen(
AddrIn((uint32_t)INADDR_ANY), port); }
134 bool listen(
AddrIn ip, uint16_t port);
136 virtual bool processIncoming()
override;
142 static constexpr uint32_t cListening = 0x00010000;
143 static constexpr uint32_t cAutoReconnect = 0x00020000;
144 static constexpr uint32_t cNoDelay = 0x00040000;
145 static constexpr uint32_t cConnected = 0x00080000;
147 int64_t connectTimeout = 0;
Contains all Cogs related functionality.