diff options
author | Sergey Uzhakov <uzhastik@gmail.com> | 2022-06-22 21:23:19 +0300 |
---|---|---|
committer | Sergey Uzhakov <uzhastik@gmail.com> | 2022-06-22 21:23:19 +0300 |
commit | b86c509aaa5b19d5659a4548395a47c9e87826e9 (patch) | |
tree | 98025d7bd574b788f6679b24f91711ea86bf07ae /contrib/libs/libc_compat/src | |
parent | f55ada30d924b55d15fad9001944df1323a9598a (diff) | |
download | ydb-b86c509aaa5b19d5659a4548395a47c9e87826e9.tar.gz |
YQ-1154: allow pg translator in OSS
ref:bc7b8dcc7b45e5f527a87a1bed622dff6f06d41a
Diffstat (limited to 'contrib/libs/libc_compat/src')
-rw-r--r-- | contrib/libs/libc_compat/src/windows/sys/uio.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/contrib/libs/libc_compat/src/windows/sys/uio.c b/contrib/libs/libc_compat/src/windows/sys/uio.c new file mode 100644 index 0000000000..50c9542dc1 --- /dev/null +++ b/contrib/libs/libc_compat/src/windows/sys/uio.c @@ -0,0 +1,36 @@ +#include <contrib/libs/libc_compat/include/windows/sys/uio.h> + +#include <Windows.h> +#include <winsock2.h> +#include <malloc.h> + +ssize_t readv(SOCKET sock, struct iovec const* iov, int iovcnt) { + WSABUF* wsabuf = (WSABUF*)alloca(iovcnt * sizeof(WSABUF)); + for (int i = 0; i < iovcnt; ++i) { + wsabuf[i].buf = iov[i].iov_base; + wsabuf[i].len = (u_long)iov[i].iov_len; + } + DWORD numberOfBytesRecv; + DWORD flags = 0; + int res = WSARecv(sock, wsabuf, iovcnt, &numberOfBytesRecv, &flags, NULL, NULL); + if (res == SOCKET_ERROR) { + errno = EIO; + return -1; + } + return numberOfBytesRecv; +} + +ssize_t writev(SOCKET sock, struct iovec const* iov, int iovcnt) { + WSABUF* wsabuf = (WSABUF*)alloca(iovcnt * sizeof(WSABUF)); + for (int i = 0; i < iovcnt; ++i) { + wsabuf[i].buf = iov[i].iov_base; + wsabuf[i].len = (u_long)iov[i].iov_len; + } + DWORD numberOfBytesSent; + int res = WSASend(sock, wsabuf, iovcnt, &numberOfBytesSent, 0, NULL, NULL); + if (res == SOCKET_ERROR) { + errno = EIO; + return -1; + } + return numberOfBytesSent; +} |