--- SocketFactory.pm	Thu Nov 07 14:57:27 2002
+++ SocketFactory.cgg	Thu Nov 07 14:55:48 2002
@@ -38,7 +38,8 @@
 # know you've broken his module.
 
 # Provide dummy POSIX constants for systems that don't have them.  Use
-# http://support.microsoft.com/support/kb/articles/Q150/5/37.asp for
+# http://msdn.microsoft.com/library/en-us/winsock/winsock/
+#   windows_sockets_error_codes_2.asp
 # the POSIX error numbers.
 BEGIN {
   if ($^O eq 'MSWin32') {
@@ -47,6 +48,19 @@
     eval '*EWOULDBLOCK   = sub { 10035 };';
     eval '*F_GETFL       = sub {     0 };';
     eval '*F_SETFL       = sub {     0 };';
+    eval '*SO_OPENTYPE   = sub { 0x7008 };';
+    eval '*SO_SYNCHRONOUS_ALERT    = sub { 0x10 };';
+    eval '*SO_SYNCHRONOUS_NONALERT = sub { 0x20 };';
+
+    # Turn on socket overlapped io attribute per MSKB: Q181611
+    eval <<'EOF';
+    socket(POE, AF_INET, SOCK_STREAM, getprotobyname('tcp'))
+      or die "socket failed: $!";
+    my $optval = unpack("I",getsockopt(POE, SOL_SOCKET, SO_OPENTYPE));
+    $optval &= ~(SO_SYNCHRONOUS_ALERT|SO_SYNCHRONOUS_NONALERT);
+    setsockopt(POE, SOL_SOCKET, SO_OPENTYPE, $optval);
+    close POE;
+EOF
   }
 
   unless (exists $INC{"Socket6.pm"}) {
@@ -394,7 +408,7 @@
 
   my %params = @_;
 
-  # The calling conventio experienced a hard deprecation.
+  # The calling convention experienced a hard deprecation.
   croak "wheels no longer require a kernel reference as their first parameter"
     if (@_ && (ref($_[0]) eq 'POE::Kernel'));
 
