14 FORMAT_MESSAGE_ALLOCATE_BUFFER |
15 FORMAT_MESSAGE_FROM_SYSTEM |
16 FORMAT_MESSAGE_IGNORE_INSERTS,
17 nullptr, WSAGetLastError(), 0,
reinterpret_cast<LPWSTR
>(&s),
23 return strerror(errno);
32 WORD w = 1 | (1 << 8);
34 if (WSAStartup(w, &wsaData) != 0) {
64 ptrdiff_t num = recv(sd, buf,
count, 0);
65 if (num > 0)
return num;
66 if (num == 0)
return -1;
74 int errLen =
sizeof(err);
75 getsockopt(sd, SOL_SOCKET, SO_ERROR,
reinterpret_cast<char*
>(&err), &errLen);
76 if (err == WSAEWOULDBLOCK)
return 0;
79 if (errno == EWOULDBLOCK)
return 0;
87 ptrdiff_t num = send(sd, buf,
count, 0);
88 if (num >= 0)
return num;
91 int errLen =
sizeof(err);
92 getsockopt(sd, SOL_SOCKET, SO_ERROR,
reinterpret_cast<char*
>(&err), &errLen);
93 if (err == WSAEWOULDBLOCK)
return 0;
96 if (errno == EWOULDBLOCK)
return 0;
ALWAYS_INLINE unsigned count(const uint8_t *pIn, const uint8_t *pMatch, const uint8_t *pInLimit)
This file implemented 3 utility functions:
ptrdiff_t sock_send(SOCKET sd, const char *buf, size_t count)
void sock_close(SOCKET sd)
ptrdiff_t sock_recv(SOCKET sd, char *buf, size_t count)
octet_iterator utf16to8(u16bit_iterator start, u16bit_iterator end, octet_iterator result)