in reply to Client socket blocks if server creates subprocess

This problem arises because system invokes the system API CreateProcess() with the bInheritHandles parameters set to true. The sub-process therefore inherits all the calling processes handles, including the listening socket with the inevitable affect.

One solution would be to side step the problem by using Win32::Process to start the sub-process ensuring that the equivalent $iflags parameter is false, thus ensuring none of the calling processes handles are inherited by the sub-process.

If you need the sub-process to inherit some handles but not others, then it will be necessary to mark those you do not wish to be inherited using the system API SetHandleInformation().

As is usually the case in these matters, it is Perl's flawed attempts to emulate *nix on Win that lies at the core of the problem.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Client socket blocks if server creates subprocess
by raandom (Acolyte) on Dec 06, 2010 at 19:49 UTC
    Thanks a lot! It works brilliant!