15#include <sys/socket.h>
24 using socket_t = SOCKET;
25 constexpr socket_t invalid_socket = INVALID_SOCKET;
26 inline int closesocket(_In_ socket_t socket) { return ::closesocket(socket); }
29 constexpr socket_t invalid_socket = ((socket_t)-1);
30 inline int closesocket(_In_ socket_t socket) { return ::close(socket); }
38 static inline const socket_t invalid_handle = stdex::invalid_socket;
43 static void close(_In_ socket_t h)
45 int result = closesocket(h);
47 int werrno = WSAGetLastError();
48 if (result >= 0 || werrno == WSAENOTSOCK)
50 throw std::system_error(werrno, std::system_category(),
"closesocket failed");
52 if (result >= 0 || errno == EBADF)
54 throw std::system_error(errno, std::system_category(),
"closesocket failed");
62 using socket = basic_sys_object<socket_t, socket_traits>;
68 struct FreeAddrInfoA_delete
73 void operator()(_In_ ADDRINFOA* ptr)
const
82 using addrinfo = std::unique_ptr<ADDRINFOA, FreeAddrInfoA_delete>;
87 struct FreeAddrInfoW_delete
92 void operator()(_In_ ADDRINFOW* ptr)
const
101 using addrinfo = std::unique_ptr<ADDRINFOW, FreeAddrInfoW_delete>;
107 using saddrinfo = waddrinfo;
109 using saddrinfo = addrinfo;
129 using addrinfo = std::unique_ptr<struct addrinfo, freeaddrinfo_delete>;
130 using saddrinfo = addrinfo;
Deleter for unique_ptr using freeaddrinfo.
Definition socket.hpp:116
void operator()(struct addrinfo *ptr) const
Delete a pointer.
Definition socket.hpp:120
Socket operations.
Definition socket.hpp:37
static void close(socket_t h)
Closes socket.
Definition socket.hpp:43