Rebuild directory structure
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#include <WinSock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <iphlpapi.h>
|
||||
|
||||
struct AddrInfoPtr {
|
||||
struct addrinfo *info;
|
||||
|
||||
AddrInfoPtr() noexcept:
|
||||
info(nullptr) {}
|
||||
~AddrInfoPtr() noexcept {
|
||||
freeaddrinfo(info);
|
||||
}
|
||||
|
||||
addrinfo** operator&() noexcept {
|
||||
return &info;
|
||||
}
|
||||
addrinfo& operator*() noexcept {
|
||||
return *info;
|
||||
}
|
||||
addrinfo* operator->() noexcept {
|
||||
return info;
|
||||
}
|
||||
const addrinfo& operator*() const noexcept {
|
||||
return *info;
|
||||
}
|
||||
|
||||
operator addrinfo*() noexcept {
|
||||
return info;
|
||||
}
|
||||
};
|
||||
|
||||
struct AddrInfo {
|
||||
struct addrinfo info;
|
||||
|
||||
static AddrInfoPtr get_local_addrinfo(PCSTR port) {
|
||||
AddrInfo hints;
|
||||
|
||||
hints->ai_family = AF_INET;
|
||||
hints->ai_socktype = SOCK_STREAM;
|
||||
hints->ai_protocol = IPPROTO_TCP;
|
||||
hints->ai_flags = AI_PASSIVE;
|
||||
|
||||
return hints.get_addrinfo(NULL, port);
|
||||
}
|
||||
|
||||
AddrInfo() noexcept {
|
||||
ZeroMemory(&info, sizeof(info));
|
||||
}
|
||||
~AddrInfo() noexcept = default;
|
||||
|
||||
addrinfo* operator->() noexcept {
|
||||
return &info;
|
||||
}
|
||||
addrinfo* operator&() noexcept {
|
||||
return &info;
|
||||
}
|
||||
|
||||
operator const addrinfo&() const noexcept {
|
||||
return info;
|
||||
}
|
||||
operator addrinfo&() noexcept {
|
||||
return info;
|
||||
}
|
||||
|
||||
AddrInfoPtr get_addrinfo(PCSTR node, PCSTR service) {
|
||||
AddrInfoPtr ptr;
|
||||
int result = getaddrinfo(node, service, &info, &ptr);
|
||||
if (result == SOCKET_ERROR) throw result;
|
||||
return ptr;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user