aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/libc_compat/src
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2022-12-20 00:50:48 +0300
committeralexv-smirnov <alex@ydb.tech>2022-12-20 00:50:48 +0300
commit84f2cfa253cc618438ed6e9d68b33fa7c0d88cb9 (patch)
treef0cf2236e0aafb3e437199f1ac7b559e7fad554a /contrib/libs/libc_compat/src
parentbde6febc1ad3b826e72746de21d7250803e8e0b5 (diff)
downloadydb-84f2cfa253cc618438ed6e9d68b33fa7c0d88cb9.tar.gz
add windows platform to ydb github export
Diffstat (limited to 'contrib/libs/libc_compat/src')
-rw-r--r--contrib/libs/libc_compat/src/windows/sys/uio.c36
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;
+}