Chris, > OK, but there can be no expectation that something like this can work > with java.net.Socket, or SocketChannel. I am only proposing to change > these two specific implementations.
OK. Thank you for clarification. The fix looks good for me. -Dmitry On 2014-12-18 15:52, Chris Hegarty wrote: > On 18 Dec 2014, at 12:22, Dmitry Samersoff <dmitry.samers...@oracle.com> > wrote: > >> Chris, >> >> In a windows world it's rather common to rely on socket inheritance >> e.g. set socket to stdin(stdout) of child process and do CreateProcess. > > OK, but there can be no expectation that something like this can work with > java.net.Socket, or SocketChannel. I am only proposing to change these two > specific implementations. > >> So please make sure your changes don't have side effects, > > The changes will have an effect, accepted sockets/channels will no longer be > inherited. No other potential side-effect is possible. > >> also it might >> be better to control handler inheritance in one place only (at >> CreateProcess call) and don't manage it explicitly in other places. > > There is some handling of a small set of “special” handles in the native > process implementation. I don’t think we want to prevent all handles from > being inherited. Are you suggesting something different ? > > -Chris. > >> -Dmitry >> >> >> On 2014-12-17 18:47, Chris Hegarty wrote: >>> A socket connection which is returned by ServerSocket.accept() is >>> inherited by a child process. The expected behavior is that the socket >>> connection is not inherited by the child process. This is an oversight >>> in the original implementation, that only sets HANDLE_FLAG_INHERIT for >>> newly created sockets. >>> >>> The native socket returned by ServerSocket.accept() should be configured >>> so it will not be inherited by a child process, >>> SetHandleInformation(<HANDLE>, HANDLE_FLAG_INHERIT, FALSE) . >>> >>> The change is in Java_java_net_DualStackPlainSocketImpl_accept0 >>> >>> diff --git >>> a/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c >>> b/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c >>> --- a/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c >>> +++ b/src/java.base/windows/native/libnet/DualStackPlainSocketImpl.c >>> @@ -294,6 +294,8 @@ >>> return -1; >>> } >>> >>> + SetHandleInformation((HANDLE)(UINT_PTR)newfd, HANDLE_FLAG_INHERIT, >>> FALSE); >>> + >>> ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port); >>> isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); >>> (*env)->SetObjectArrayElement(env, isaa, 0, isa); >>> >>> -Chris. >> >> >> -- >> Dmitry Samersoff >> Oracle Java development team, Saint Petersburg, Russia >> * I would love to change the world, but they won't give me the sources. > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.