diff --git a/src/event/ngx_event_wsarecv.c b/src/event/ngx_event_wsarecv.c
new file mode 100644
index 0000000..20c0c1b
--- /dev/null
+++ b/src/event/ngx_event_wsarecv.c
@@ -0,0 +1,97 @@
+
+#include <ngx_config.h>
+
+#include <ngx_core.h>
+#include <ngx_errno.h>
+#include <ngx_log.h>
+#include <ngx_connection.h>
+#include <ngx_event.h>
+
+
+ssize_t ngx_event_wsarecv(ngx_connection_t *c, char *buf, size_t size)
+{
+    int           rc;
+    u_int         flags;
+    size_t        bytes;
+    ngx_err_t     err;
+    WSABUF        wsabuf[1];
+    ngx_event_t  *ev;
+    LPWSAOVERLAPPED_COMPLETION_ROUTINE  handler;
+
+    ev = c->read;
+
+/* DEBUG */ bytes = 0;
+
+    if (ev->timedout) {
+        ngx_set_socket_errno(NGX_ETIMEDOUT);
+        ngx_log_error(NGX_LOG_ERR, ev->log, 0, "WSARecv() timed out");
+
+        return NGX_ERROR;
+    }
+
+    if (ev->ready) {
+        ev->ready = 0;
+
+#if (HAVE_IOCP_EVENT) /* iocp */
+
+        if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) {
+            if (ev->ovlp.error) {
+                ngx_log_error(NGX_LOG_ERR, c->log, ev->ovlp.error,
+                              "WSARecv() failed");
+                return NGX_ERROR;
+            }
+
+            return ev->available;
+        }
+
+#endif
+
+        if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &ev->ovlp,
+                                   &bytes, 0, NULL) == 0) {
+            err = ngx_socket_errno;
+            ngx_log_error(NGX_LOG_CRIT, ev->log, err,
+                         "WSARecv() or WSAGetOverlappedResult() failed");
+
+            return NGX_ERROR;
+        }
+
+        return bytes;
+    }
+
+    ngx_memzero(&ev->ovlp, sizeof(WSAOVERLAPPED));
+    wsabuf[0].buf = buf;
+    wsabuf[0].len = size;
+    flags = 0;
+
+#if 0
+    handler = ev->handler;
+#else
+    handler = NULL;
+#endif
+
+    rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags,
+                 (LPWSAOVERLAPPED) &ev->ovlp, handler);
+
+    ngx_log_debug(ev->log, "WSARecv: %d:%d" _ rc _ bytes);
+
+    if (rc == -1) {
+        err = ngx_socket_errno;
+        if (err == WSA_IO_PENDING) {
+            return NGX_AGAIN;
+
+        } else {
+            ngx_log_error(NGX_LOG_CRIT, ev->log, err, "WSARecv() failed");
+            return NGX_ERROR;
+        }
+    }
+
+#if (HAVE_IOCP_EVENT) /* iocp */
+
+    if (ngx_event_flags & NGX_HAVE_IOCP_EVENT) {
+        return NGX_AGAIN;
+    }
+
+#endif
+
+    return bytes;
+}
