X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Finet.cpp;h=17546e88dfe62dc6ec2ba273d808c47653a5e1b8;hb=HEAD;hp=29e24aa7836d6843652da740fb47de576e8db387;hpb=debe1004676d5431e571d9c4361072661dcc88c4;p=libs%2Fnet.git diff --git a/source/net/inet.cpp b/source/net/inet.cpp index 29e24aa..17546e8 100644 --- a/source/net/inet.cpp +++ b/source/net/inet.cpp @@ -1,10 +1,6 @@ -#ifdef WIN32 -#include -#else -#include -#endif -#include +#include "platform_api.h" #include "inet.h" +#include #include "sockaddr_private.h" using namespace std; @@ -12,29 +8,38 @@ using namespace std; namespace Msp { namespace Net { -InetAddr::InetAddr(): - port(0) -{ - fill(addr, addr+4, 0); -} - InetAddr::InetAddr(const SysAddr &sa) { const sockaddr_in &sai = reinterpret_cast(sa.addr); - addr[0] = sai.sin_addr.s_addr>>24; - addr[1] = sai.sin_addr.s_addr>>16; - addr[2] = sai.sin_addr.s_addr>>8; - addr[3] = sai.sin_addr.s_addr; + const char *ptr = reinterpret_cast(&sai.sin_addr.s_addr); + std::copy(ptr, ptr+4, addr); port = ntohs(sai.sin_port); } +InetAddr InetAddr::wildcard(unsigned port) +{ + InetAddr addr; + addr.port = port; + return addr; +} + +InetAddr InetAddr::localhost(unsigned port) +{ + InetAddr addr; + addr.addr[0] = 127; + addr.addr[3] = 1; + addr.port = port; + return addr; +} + SockAddr::SysAddr InetAddr::to_sys() const { SysAddr sa; sa.size = sizeof(sockaddr_in); sockaddr_in &sai = reinterpret_cast(sa.addr); sai.sin_family = AF_INET; - sai.sin_addr.s_addr = (addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | (addr[3]); + char *ptr = reinterpret_cast(&sai.sin_addr.s_addr); + std::copy(addr, addr+4, ptr); sai.sin_port = htons(port); return sa;