diff --git a/include/stdex/socket.hpp b/include/stdex/socket.hpp index abfc1bfed..9b9e8c826 100644 --- a/include/stdex/socket.hpp +++ b/include/stdex/socket.hpp @@ -11,9 +11,12 @@ #include "windows.h" #include #else +#include #include +#include #include #endif +#include namespace stdex { @@ -57,4 +60,73 @@ namespace stdex /// Socket /// using socket = basic_sys_object; + +#ifdef _WIN32 + /// + /// Deleter for unique_ptr using FreeAddrInfoA + /// + struct FreeAddrInfoA_delete + { + /// + /// Delete a pointer + /// + void operator()(_In_ ADDRINFOA* ptr) const + { + FreeAddrInfoA(ptr); + } + }; + + /// + /// addrinfo struct + /// + using addrinfo = std::unique_ptr; + + /// + /// Deleter for unique_ptr using FreeAddrInfoW + /// + struct FreeAddrInfoW_delete + { + /// + /// Delete a pointer + /// + void operator()(_In_ ADDRINFOW* ptr) const + { + FreeAddrInfoW(ptr); + } + }; + + /// + /// addrinfo struct + /// + using addrinfo = std::unique_ptr; + + /// + /// Multi-byte / Wide-character ADDRINFO wrapper class (according to _UNICODE) + /// +#ifdef UNICODE + using saddrinfo = waddrinfo; +#else + using saddrinfo = addrinfo; +#endif +#else + /// + /// Deleter for unique_ptr using freeaddrinfo + /// + struct freeaddrinfo_delete + { + /// + /// Delete a pointer + /// + void operator()(_In_ struct addrinfo* ptr) const + { + freeaddrinfo(ptr); + } + }; + + /// + /// addrinfo struct + /// + using addrinfo = std::unique_ptr; + using saddrinfo = addrinfo; +#endif }