13 #ifndef __STOUT_OS_WINDOWS_SOCKET_HPP__
14 #define __STOUT_OS_WINDOWS_SOCKET_HPP__
16 #include <glog/logging.h>
30 WORD requestedVersion = MAKEWORD(2, 2);
33 const int result = ::WSAStartup(requestedVersion, &data);
35 const int error = ::WSAGetLastError();
36 LOG(ERROR) <<
"Could not initialize WinSock, error code : " <<
error;
42 if (LOBYTE(data.wVersion) < 2 ||
43 (LOBYTE(data.wVersion) == 2 && HIBYTE(data.wVersion) != 2)) {
44 LOG(ERROR) <<
"Incorrect WinSock version found : " << LOBYTE(data.wVersion)
45 <<
"." << HIBYTE(data.wVersion);
49 if (::WSACleanup() != 0) {
50 const int error = ::WSAGetLastError();
51 LOG(ERROR) <<
"Could not cleanup WinSock, error code : " <<
error;
67 while (retriesLeft > 0) {
68 const int result = ::WSACleanup();
70 const int error = ::WSAGetLastError();
72 if (error == WSANOTINITIALISED) {
77 if (error == WSAEINPROGRESS) {
78 LOG(ERROR) <<
"Waiting for outstanding WinSock calls to complete.";
82 LOG(ERROR) <<
"Could not cleanup WinSock, error code : " <<
error;
88 if (retriesLeft == 0) {
121 const os::WindowsFD& fd,
const sockaddr* addr, socklen_t addrlen)
123 CHECK_LE(addrlen, INT32_MAX);
131 CHECK_LE(addrlen, INT32_MAX);
139 CHECK_LE(len, INT32_MAX);
141 fd, static_cast<const char*>(buf), static_cast<int>(len), flags);
147 CHECK_LE(len, INT32_MAX);
148 return ::recv(fd, static_cast<char*>(buf), static_cast<int>(len), flags);
153 #endif // __STOUT_OS_WINDOWS_SOCKET_HPP__
SSIZE_T ssize_t
Definition: windows.hpp:192
int bind(const os::WindowsFD &fd, const sockaddr *addr, socklen_t addrlen)
Definition: socket.hpp:120
os::WindowsFD accept(const os::WindowsFD &fd, sockaddr *addr, socklen_t *addrlen)
Definition: socket.hpp:113
Try< Address > address(int_fd s)
Returns the Address with the assigned ip and assigned port.
Definition: network.hpp:79
int connect(const os::WindowsFD &fd, const sockaddr *address, socklen_t addrlen)
Definition: socket.hpp:128
bool is_inprogress_error(int error)
Definition: socket.hpp:48
ssize_t send(const os::WindowsFD &fd, const void *buf, size_t len, int flags)
Definition: socket.hpp:136
bool is_restartable_error(int error)
Definition: socket.hpp:33
bool wsa_initialize()
Definition: socket.hpp:27
ssize_t recv(const os::WindowsFD &fd, void *buf, size_t len, int flags)
Definition: socket.hpp:145
Future< Connection > connect(const network::Address &address, Scheme scheme)
Try< int_fd > accept(int_fd s)
Definition: network.hpp:31
#define flags
Definition: decoder.hpp:18
std::string error(const std::string &msg, uint32_t code)
bool wsa_cleanup()
Definition: socket.hpp:61
Try< Nothing > bind(int_fd s, const Address &address)
Definition: network.hpp:46
bool is_retryable_error(int error)
Definition: socket.hpp:42