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