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 aren't fds. 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 either.) Brian -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/