diff --git a/src/os/win32/ngx_sendfile.c b/src/os/win32/ngx_sendfile.c
index 560f50f..ce43b37 100644
--- a/src/os/win32/ngx_sendfile.c
+++ b/src/os/win32/ngx_sendfile.c
@@ -6,6 +6,7 @@
 #include <ngx_socket.h>
 #include <ngx_errno.h>
 #include <ngx_log.h>
+#include <ngx_connection.h>
 #include <ngx_sendv.h>
 #include <ngx_sendfile.h>
 
@@ -17,18 +18,51 @@
 
 #if (HAVE_WIN32_TRANSMITFILE)
 
-int ngx_sendfile(ngx_socket_t s,
+int ngx_sendfile(ngx_connection_t *c,
                  ngx_iovec_t *headers, int hdr_cnt,
                  ngx_fd_t fd, off_t offset, size_t nbytes,
                  ngx_iovec_t *trailers, int trl_cnt,
-                 off_t *sent,
-                 ngx_log_t *log)
+                 off_t *sent, u_int flags)
 {
     int                    tfrc, rc;
     ngx_err_t              tf_err, err;
     OVERLAPPED             olp;
     TRANSMIT_FILE_BUFFERS  tfb, *ptfb;
 
+#if 0
+    ev = c->write;
+
+    if (ev->timedout) {
+        ngx_set_socket_errno(NGX_ETIMEDOUT);
+        ngx_log_error(NGX_LOG_ERR, ev->log, 0, "TransmitFile() 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, ev->log, 0, "TransmitFile() failed");
+                return NGX_ERROR;
+            }
+
+            return ev->available;
+            }
+        }
+
+#endif
+
+        /* TODO: WSAGetOverlappedResult stuff */
+
+    }
+
+#endif
+
+
     tf_err = 0;
     err = 0;
 
@@ -49,40 +83,54 @@
         ptfb = NULL;
     }
 
-#if 1
-    tfrc = TransmitFile(s, fd, nbytes, 0, &olp, ptfb, 0);
-#else
-    tfrc = TransmitFile(s, fd, nbytes, 0, NULL, ptfb, 0);
+#if 0
+    flags = TF_DISCONNECT|TF_REUSE_SOCKET;
 #endif
 
-    if (tfrc == 0)
+    tfrc = TransmitFile(c->fd, fd, nbytes, 0, &olp, ptfb, flags);
+
+#if 0
+#if 1
+    tfrc = TransmitFile(c->fd, fd, nbytes, 0, &olp, ptfb, 0);
+#else
+    tfrc = TransmitFile(c->fd, fd, nbytes, 0, NULL, ptfb, 0);
+#endif
+#endif
+
+    if (tfrc == 0) {
         tf_err = ngx_socket_errno;
+        ngx_log_error(NGX_LOG_NOTICE, c->log, tf_err,
+                      "ngx_sendfile: TransmitFile failed");
+        if (tf_err == WSA_IO_PENDING) {
+            return NGX_AGAIN;
+        }
+    }
 
     /* set sent */
 #if 0
-    rc = WSAGetOverlappedResult(s, &olp, (unsigned long *) sent, 0, NULL);
+    rc = WSAGetOverlappedResult(c->fd, &olp, (unsigned long *) sent, 0, NULL);
 #else
     *sent = olp.InternalHigh;
     rc = 1;
 #endif
 
-    ngx_log_debug(log, "ngx_sendfile: %d, @%I64d %I64d:%d" _
+    ngx_log_debug(c->log, "TransmitFile: %d, @%I64d %I64d:%d" _
                   tfrc _ offset _ *sent _ nbytes);
 
     if (rc == 0) {
         err = ngx_socket_errno;
-        ngx_log_error(NGX_LOG_ERR, log, err,
+        ngx_log_error(NGX_LOG_ERR, c->log, err,
                      "ngx_sendfile: WSAGetOverlappedResult failed");
     }
 
     if (tfrc == 0) {
         if (tf_err != NGX_EAGAIN) {
-            ngx_log_error(NGX_LOG_ERR, log, tf_err,
+            ngx_log_error(NGX_LOG_ERR, c->log, tf_err,
                           "ngx_sendfile: TransmitFile failed");
             return NGX_ERROR;
         }
 
-        ngx_log_error(NGX_LOG_INFO, log, tf_err,
+        ngx_log_error(NGX_LOG_INFO, c->log, tf_err,
                       "ngx_sendfile: TransmitFile sent only %I64d bytes",
                       *sent);
     }
diff --git a/src/os/win32/ngx_socket.c b/src/os/win32/ngx_socket.c
index d0e547c..09cbddf 100644
--- a/src/os/win32/ngx_socket.c
+++ b/src/os/win32/ngx_socket.c
@@ -1,19 +1,75 @@
+
 #include <ngx_config.h>
 
+#include <ngx_core.h>
 #include <ngx_log.h>
 #include <ngx_errno.h>
 #include <ngx_socket.h>
 
 
-void ngx_init_sockets(ngx_log_t *log)
+/* These pointers should be per protocol ? */
+LPFN_ACCEPTEX              AcceptEx;
+LPFN_GETACCEPTEXSOCKADDRS  GetAcceptExSockaddrs;
+LPFN_TRANSMITFILE          TransmitFile;
+
+static GUID ae_guid = WSAID_ACCEPTEX;
+static GUID as_guid = WSAID_GETACCEPTEXSOCKADDRS;
+static GUID tf_guid = WSAID_TRANSMITFILE;
+
+
+int ngx_init_sockets(ngx_log_t *log)
 {
+    DWORD    bytes;
+    SOCKET   s;
     WSADATA  wsd;
 
-    if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
+    if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
         ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
-                      "ngx_init_sockets: WSAStartup failed");
+                      "WSAStartup failed");
+        return NGX_ERROR;
+    }
 
-    /* get AcceptEx(), TransmitFile() functions */
+    s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0);
+    if (s == -1) {
+        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
+                      ngx_socket_n " %s falied");
+        return NGX_ERROR;
+    }
+
+    if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &ae_guid, sizeof(GUID),
+                 &AcceptEx, sizeof(LPFN_ACCEPTEX), &bytes, NULL, NULL) == -1) {
+
+        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
+                      "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
+                               "WSAID_ACCEPTEX) failed");
+        return NGX_ERROR;
+    }
+
+    if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &as_guid, sizeof(GUID),
+                 &GetAcceptExSockaddrs, sizeof(LPFN_GETACCEPTEXSOCKADDRS),
+                 &bytes, NULL, NULL) == -1) {
+
+        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
+                      "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
+                               "WSAID_ACCEPTEX) failed");
+        return NGX_ERROR;
+    }
+
+    if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tf_guid, sizeof(GUID),
+                 &TransmitFile, sizeof(LPFN_TRANSMITFILE), &bytes,
+                                                           NULL, NULL) == -1) {
+        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
+                      "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
+                               "WSAID_TRANSMITFILE) failed");
+        return NGX_ERROR;
+    }
+
+    if (ngx_close_socket(s) == -1) {
+        ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
+                      ngx_close_socket_n " failed");
+    }
+
+    return NGX_OK;
 }
 
 int ngx_nonblocking(ngx_socket_t s)
diff --git a/src/os/win32/ngx_socket.h b/src/os/win32/ngx_socket.h
index 98e1520..f94d45c 100644
--- a/src/os/win32/ngx_socket.h
+++ b/src/os/win32/ngx_socket.h
@@ -12,14 +12,17 @@
 typedef SOCKET  ngx_socket_t;
 typedef int     socklen_t;
 
-void ngx_init_sockets(ngx_log_t *log);
+int ngx_init_sockets(ngx_log_t *log);
 
 #define ngx_socket(af, type, proto, flags)                                    \
             WSASocket(af, type, proto, NULL, 0, flags)
 #define ngx_socket_n        "WSASocket()"
 
 int ngx_nonblocking(ngx_socket_t s);
+int ngx_blocking(ngx_socket_t s);
+
 #define ngx_nonblocking_n   "ioctlsocket(FIONBIO)"
+#define ngx_blocking_n      "ioctlsocket(!FIONBIO)"
 
 #define ngx_shutdown_socket    shutdown
 #define ngx_shutdown_socket_n  "shutdown()"
@@ -28,5 +31,9 @@
 #define ngx_close_socket_n  "closesocket()"
 
 
+extern LPFN_ACCEPTEX              acceptex;
+extern LPFN_GETACCEPTEXSOCKADDRS  getacceptexsockaddrs;
+extern LPFN_TRANSMITFILE          transmitfile;
+
 
 #endif /* _NGX_SOCKET_H_INCLUDED_ */
