* fhandler_socket.cc (fhandler_socket::dup): Don't call

fhandler_base::dup() but call DuplicateHandle directly instead to have
	control over socket inheritence.
This commit is contained in:
Corinna Vinschen 2003-03-11 16:49:58 +00:00
parent 296b2a5f17
commit aa39b7f7bf
2 changed files with 20 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2003-03-11 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::dup): Don't call
fhandler_base::dup() but call DuplicateHandle directly instead to have
control over socket inheritence.
2003-03-11 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::dup): On NT systems avoid

View File

@ -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