This is the mail archive of the
mailing list for the Cygwin project.
Re: Socket inheritance with fork/dup2/exec
- From: Brian Dessent <brian at dessent dot net>
- To: cygwin at cygwin dot com
- Date: Thu, 21 Jun 2007 16:04:42 -0700
- Subject: Re: Socket inheritance with fork/dup2/exec
- References: <200706212245.l5LMjELU006807@chi.hcst.net>
- Reply-to: cygwin at cygwin dot com
Jim Powers wrote:
> I am redirecting the stdout of a child process to a socket via the standard
> fork/dup2/exec paradigm and then reading and displaying the output.
> This works fine if the exec'd child process is compiled using gcc under
> cygwin. However, it fails with an "Invalid file handle" error when compiled
> using VC8 under windows.
> I've included both the parent and child code below.
I'm fairly sure this isn't supposed to work. Unix domain sockets
(AF_UNIX/AF_LOCAL) don't actually exist in any Windows API so Cygwin
emulates them with an underlying AF_INET socket. So when your MSVCRT
program tries to WriteFile to a socket it fails, because you have to use
the Winsock API for that. In short, Windows is not unix, and handles
You can probably make this work if you use pipe() instead of a
socketpair() as that maps directly onto a Windows anonymous pipe, which
is a file handle that can be written to. You could also use a named
pipe, which is the closest Windows has to a unix domain socket, but
there is no corresponding POSIX api for that and so you'd be breaking
abstraction as you'd have to deal with raw Win32 APIs in your POSIX
parent app, which is ugly (and not how Cygwin was designed to work
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html