-#ifdef WIN32
-#include <winsock2.h>
-#else
-#include <netinet/in.h>
-#endif
-#include <msp/strings/format.h>
+#include "platform_api.h"
#include "inet.h"
+#include <msp/strings/format.h>
#include "sockaddr_private.h"
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<const sockaddr_in &>(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<const char *>(&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<sockaddr_in &>(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<char *>(&sai.sin_addr.s_addr);
+ std::copy(addr, addr+4, ptr);
sai.sin_port = htons(port);
return sa;