11#if _SQUID_WINDOWS_ || _SQUID_MINGW_
19#define _S_IREAD 0x0100
23#define _S_IWRITE 0x0080
28isSocket(intptr_t handle)
30 if (!isValidSocketHandle(handle)) {
36 int valueSize =
sizeof(value);
37 const auto savedErrno = errno;
39 const auto result = (getsockopt(handle, SOL_SOCKET, SO_TYPE,
reinterpret_cast<char *
>(&value), &valueSize) == 0);
47 const auto sock = _get_osfhandle(fd);
48 if (sock == intptr_t(INVALID_HANDLE_VALUE)) {
54 const auto result = closesocket(sock);
55 if (result == SOCKET_ERROR)
56 SetErrnoFromWsaError();
59 const auto result = _close(fd);
61 SetErrnoFromWsaError();
70 const auto result = gethostname(name,
static_cast<int>(nameLength));
71 if (result == SOCKET_ERROR)
72 SetErrnoFromWsaError();
77xopen(
const char *filename,
int oflag,
int pmode)
79 return _open(filename, oflag, pmode & (_S_IREAD | _S_IWRITE));
83xread(
int fd,
void * buf,
size_t bufSize)
85 const auto sock = _get_osfhandle(fd);
86 if (sock == intptr_t(INVALID_HANDLE_VALUE)) {
91 assert(bufSize <= UINT_MAX);
93 return xrecv(sock, buf, bufSize, 0);
95 return _read(fd, buf,
static_cast<unsigned int>(bufSize));
99xwrite(
int fd,
const void * buf,
size_t bufSize)
101 const auto sock = _get_osfhandle(fd);
102 if (sock == intptr_t(INVALID_HANDLE_VALUE)) {
107 assert(bufSize <= UINT_MAX);
109 return xsend(sock, buf, bufSize, 0);
111 return _write(fd, buf,
static_cast<unsigned int>(bufSize));
ssize_t xrecv(int socketFd, void *buf, size_t bufLength, int flags)
POSIX recv(2) equivalent.
ssize_t xsend(int socketFd, const void *buf, size_t bufLength, int flags)
POSIX send(2) equivalent.
int xread(int fd, void *buf, size_t bufSize)
POSIX read(2) equivalent.
int xwrite(int fd, const void *buf, size_t bufSize)
POSIX write(2) equivalent.
int xclose(int fd)
POSIX close(2) equivalent.
int xgethostname(char *name, size_t nameLength)
POSIX gethostname(2) equivalent.
int xopen(const char *filename, int oflag, int pmode=0)
POSIX open(2) equivalent.