Index: child.c
===================================================================
--- child.c	(revision 1371324)
+++ child.c	(working copy)
@@ -294,7 +294,7 @@
     ap_listen_rec *lr = (ap_listen_rec *)lr_;
     apr_os_sock_info_t sockinfo;
     winnt_conn_ctx_t *context = NULL;
-    DWORD BytesRead;
+    DWORD BytesRead = 0;
     SOCKET nlsd;
     LPFN_ACCEPTEX lpfnAcceptEx = NULL;
     LPFN_GETACCEPTEXSOCKADDRS lpfnGetAcceptExSockaddrs = NULL;
@@ -832,6 +832,28 @@
             }
         }
 
+        /*  AcceptFilter connect|none do not read data. Read it here.  */
+        if ((context->overlapped.Pointer == NULL) && (context->accept_socket != INVALID_SOCKET))
+        {
+            apr_bucket *b;
+            char *buffer;
+
+            buffer = apr_bucket_alloc(APR_BUCKET_BUFF_SIZE, context->ba);
+            rc = recv(context->accept_socket, buffer, APR_BUCKET_BUFF_SIZE, 0);
+            if (rc == SOCKET_ERROR)
+            {
+                ap_log_error(APLOG_MARK, APLOG_ERR, rc, ap_server_conf, APLOGNO(00365)
+                        "worker_main: recv error");
+                apr_bucket_free(buffer);
+                continue;
+            }
+
+            b = apr_bucket_heap_create(buffer, APR_BUCKET_BUFF_SIZE,
+                                           apr_bucket_free, context->ba);
+            b->length = rc;
+            context->overlapped.Pointer = b;
+        }
+
         e = context->overlapped.Pointer;
 
         ap_create_sb_handle(&sbh, context->ptrans, 0, thread_num);
