windows: Provide a read(2) wrapper that uses recv(2) on sockets
[strongswan.git] / src / libstrongswan / utils / windows.c
index 6ce9d77..e511db0 100644 (file)
@@ -646,6 +646,22 @@ ssize_t windows_sendto(int sockfd, const void *buf, size_t len, int flags,
 /**
  * See header
  */
 /**
  * See header
  */
+#undef read
+ssize_t windows_read(int fd, void *buf, size_t count)
+{
+       ssize_t ret;
+
+       ret = recv(fd, buf, count, 0);
+       if (ret == -1 && WSAGetLastError() == WSAENOTSOCK)
+       {
+               ret = read(fd, buf, count);
+       }
+       return ret;
+}
+
+/**
+ * See header
+ */
 int poll(struct pollfd *fds, int nfds, int timeout)
 {
        return wserr(WSAPoll(fds, nfds, timeout));
 int poll(struct pollfd *fds, int nfds, int timeout)
 {
        return wserr(WSAPoll(fds, nfds, timeout));