Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Delivered-To: mailing list cygwin@cygwin.com Date: Tue, 4 Jun 2002 10:59:00 -0400 (EDT) From: David E Euresti To: Subject: Re: Socket Handles duplicated twice after fork Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII 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, fixup_before_fork calls, WSADuplicateSocketA (get_socket (), win_proc_id, prot_info_ptr) now this doesn't actually create a new handle. It just stores the info in prot_info_ptr, but fixup_after_fork calls, new_sock = WSASocketA (FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, prot_info_ptr, 0, 0) and this creates the new handle, then set_io_handle ((HANDLE) new_sock); and the old handle disappears into oblivion. 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) Hope this helps. David -- 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/