summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_socket.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-03-11 16:49:58 +0000
committerCorinna Vinschen <corinna@vinschen.de>2003-03-11 16:49:58 +0000
commitaa39b7f7bf68cd49cfc9edcbbc05e269694f05a8 (patch)
treeece59ab8ab48801a89c51b6ad792ad01cc260ff2 /winsup/cygwin/fhandler_socket.cc
parent296b2a5f17305b187f6a190108161cd3ba055d01 (diff)
downloadcygnal-aa39b7f7bf68cd49cfc9edcbbc05e269694f05a8.tar.gz
cygnal-aa39b7f7bf68cd49cfc9edcbbc05e269694f05a8.tar.bz2
cygnal-aa39b7f7bf68cd49cfc9edcbbc05e269694f05a8.zip
* fhandler_socket.cc (fhandler_socket::dup): Don't call
fhandler_base::dup() but call DuplicateHandle directly instead to have control over socket inheritence.
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r--winsup/cygwin/fhandler_socket.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index c673df2af..7617bc23b 100644
--- a/winsup/cygwin/fhandler_socket.cc
+++ b/winsup/cygwin/fhandler_socket.cc
@@ -400,7 +400,20 @@ fhandler_socket::dup (fhandler_base *child)
return get_io_handle () == (HANDLE) INVALID_SOCKET;
}
}
- return fhandler_base::dup (child);
+ /* We don't call fhandler_base::dup here since that requires to
+ have winsock called from fhandler_base and it creates only
+ inheritable sockets which is wrong for winsock2. */
+ HANDLE nh;
+ if (!DuplicateHandle (hMainProc, get_io_handle (), hMainProc, &nh, 0,
+ !winsock2_active, DUPLICATE_SAME_ACCESS))
+ {
+ system_printf ("dup(%s) failed, handle %x, %E",
+ get_name (), get_io_handle ());
+ __seterrno ();
+ return -1;
+ }
+ child->set_io_handle (nh);
+ return 0;
}
int __stdcall