20 #ifndef VISIONTRANSFER_NETWORKING_H 21 #define VISIONTRANSFER_NETWORKING_H 26 #define _WIN32_WINNT 0x501 28 #define _WINSOCK_DEPRECATED_NO_WARNINGS 58 #define EWOULDBLOCK WSAEWOULDBLOCK 59 #define ECONNRESET WSAECONNRESET 60 #define ETIMEDOUT WSAETIMEDOUT 61 #define EPIPE WSAECONNABORTED 62 #define MSG_DONTWAIT 0 63 #define SHUT_WR SD_BOTH 65 inline int close(SOCKET s) {
66 return closesocket(s);
72 #define errno WSAGetLastError() 73 #define strerror win_strerror 77 #define snprintf _snprintf_s 80 inline std::string win_strerror(
unsigned long error) {
82 if(FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
83 FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
84 nullptr, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
85 (LPSTR)&str, 0,
nullptr) == 0 || str ==
nullptr) {
86 return "Unknown error";
89 snprintf(buffer,
sizeof(buffer),
"%s (%lu)", str, error);
91 return std::string(buffer);
95 typedef int socklen_t;
98 #include <arpa/inet.h> 99 #include <netinet/tcp.h> 100 #include <sys/types.h> 101 #include <sys/socket.h> 102 #include <sys/select.h> 104 #include <netinet/in.h> 112 #define INVALID_SOCKET -1 115 #define WSA_IO_PENDING 0 116 #define WSAECONNRESET 0 127 static void initNetworking();
128 static addrinfo* resolveAddress(
const char* address,
const char* service);
129 static SOCKET connectTcpSocket(
const addrinfo* address);
130 static void setSocketTimeout(SOCKET socket,
int timeoutMillisec);
131 static void closeSocket(SOCKET& socket);
132 static void setSocketBlocking(SOCKET socket,
bool blocking);
133 static void enableReuseAddress(SOCKET socket,
bool reuse);
134 static void bindSocket(SOCKET socket,
const addrinfo* addressInfo);
135 static SOCKET acceptConnection(SOCKET socket, sockaddr_in& remoteAddress);
A collection of helper functions for implementing network communication.