Socket Handles duplicated twice after fork

Corinna Vinschen corinna-cygwin@cygwin.com
Tue Jun 4 09:29:00 GMT 2002


On Tue, Jun 04, 2002 at 10:59:00AM -0400, David E Euresti wrote:
> Ah the additional handles come from this.
> 
> fork call CreateProcess as follows
>   rc = CreateProcess (myself->progname, /* image to run */
> 		      myself->progname, /* what we send in arg0 */
> 		      sec_attribs,
> 		      sec_attribs,
> 		      TRUE,	  /* inherit handles from parent */
> 		      c_flags,
> 		      NULL,	  /* environment filled in later */
> 		      0,	  /* use current drive/directory */
> 		      &si,
> 		      &pi);
> 
> notice the inherit handles from parent,

The handles are only inherited if they are explicitly marked as
inheritable.  The Cygwin code lives for a long time now under the
assumption that sockets aren't inheritable if they aren't
explicitely set to be inheritable (see net.cc, fdsock()).

This seems to be wrong, apparently.

> I don't know why it's written this way.  It would seem easier to just use
> the same Duplicated handle from the CreateProcess.  I'm thinking that
> maybe on Win9x it doesn't work the same (but I haven't even tested it)

You're right.  This code tries to eliminate a problem on 9x/Me
with sockets duplicated by DuplicateHandle() which results in
various annoying effects (see TechNet).  I'd never had written that
Winsock2 duplication code otherwise since we never had a problem
duplicating and inheriting a socket on NT.

Corinna

> Hope this helps.

Yes, it helps to rethink the situation.

Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                                mailto:cygwin@cygwin.com
Red Hat, Inc.

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list