From a95409c9edbbcbd2e7788210304582ed396da650 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Sat, 17 Aug 2024 21:42:20 +0200 Subject: [PATCH] socket: add addrinfo, waddrinfo and saddrinfo Signed-off-by: Simon Rozman --- include/stdex/socket.hpp | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) 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 }