diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-03-11 16:49:58 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-03-11 16:49:58 +0000 |
commit | aa39b7f7bf68cd49cfc9edcbbc05e269694f05a8 (patch) | |
tree | ece59ab8ab48801a89c51b6ad792ad01cc260ff2 /winsup/cygwin/fhandler_socket.cc | |
parent | 296b2a5f17305b187f6a190108161cd3ba055d01 (diff) | |
download | cygnal-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.cc | 15 |
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 |