18 #include <arpa/inet.h> 19 #include <netinet/in.h> 20 #include <sys/socket.h> 22 #include <sys/types.h> 25 #include "PlatformDefs.h" 50 sockaddr saddr_generic;
57 memset(&saddr, 0,
sizeof(saddr));
58 saddr.saddr4.sin_family = AF_INET;
59 saddr.saddr4.sin_addr.s_addr = htonl(INADDR_ANY);
60 size =
sizeof(saddr.saddr4);
63 explicit CAddress(
const char *address)
68 void SetAddress(
const char *address)
71 memset(&saddr, 0,
sizeof(saddr));
72 if (inet_pton(AF_INET6, address, &addr6) == 1)
74 saddr.saddr6.sin6_family = AF_INET6;
75 saddr.saddr6.sin6_addr = addr6;
76 size =
sizeof(saddr.saddr6);
80 saddr.saddr4.sin_family = AF_INET;
81 saddr.saddr4.sin_addr.s_addr = inet_addr(address);
82 size =
sizeof(saddr.saddr4);
89 if (saddr.saddr_generic.sa_family == AF_INET6)
91 static char buf[INET6_ADDRSTRLEN];
92 return inet_ntop(AF_INET6, &saddr.saddr6.sin6_addr, buf, size);
95 return inet_ntoa(saddr.saddr4.sin_addr);
100 if (saddr.saddr_generic.sa_family == AF_INET6)
106 uint32_t hash = 5381;
107 for (
int i = 0; i < 16; ++i)
109 hash = hash * 33 + saddr.saddr6.sin6_addr.s6_addr[i];
114 if (hash == 0xffffffffu)
116 return (
unsigned long)htonl(hash);
119 return (
unsigned long)saddr.saddr4.sin_addr.s_addr;
139 virtual bool Bind(
bool localOnly,
int port,
int range=0) = 0;
140 virtual bool Connect() = 0;
141 virtual void Close() {}
144 bool Ready() {
return m_bReady; }
145 bool Bound() {
return m_bBound; }
146 SocketType Type() {
return m_Type; }
147 int Port() {
return m_iPort; }
148 virtual SOCKET Socket() = 0;
151 virtual void SetBound(
bool set=
true) { m_bBound =
set; }
152 virtual void SetReady(
bool set=
true) { m_bReady =
set; }
172 virtual int SendTo(
const CAddress& addr,
const int bufferlength,
173 const void* buffer) = 0;
176 virtual int Read(
CAddress& addr,
const int buffersize,
void *buffer) = 0;
177 virtual bool Broadcast(
const CAddress& addr,
const int datasize,
178 const void* data) = 0;
191 m_iSock = INVALID_SOCKET;
192 m_ipv6Socket =
false;
195 bool Bind(
bool localOnly,
int port,
int range=0)
override;
196 bool Connect()
override {
return false; }
197 bool Listen(
int timeout);
198 int SendTo(
const CAddress& addr,
const int datasize,
const void* data)
override;
199 int Read(
CAddress& addr,
const int buffersize,
void *buffer)
override;
205 SOCKET Socket()
override {
return m_iSock; }
206 void Close()
override;
213 bool CheckIPv6(
int port,
int range);
224 static std::unique_ptr<CUDPSocket> CreateUDPSocket();
231 #define LISTENERROR 1 232 #define LISTENEMPTY 2 239 bool Listen(
int timeoutMs);
245 std::vector<CBaseSocket*> m_sockets;
248 int m_iCurrentSocket;
bool Broadcast(const CAddress &addr, const int datasize, const void *data) override
Definition: Socket.h:200