[sf-perl] Weird IPC/Apache problem

Randy J. Ray rjray at blackperl.com
Tue Jan 19 13:37:05 PST 2010

(I've posted this to Stackoverflow.com and one other PM list, so apologies if
anyone happens to see this twice)

I have a module that uses IPC::Open3 (or IPC::Open2, both exhibit this problem)
to call an external binary (bogofilter in this case) and feed it some input via
the child-input filehandle, then reads the result from the child-output handle.
The code works fine when run in most environments. However, the main use of
this module is in a web service that runs under Apache 2.2.6. And under that
environment, I get the error:

Cannot fdopen STDOUT: Invalid argument

This only happens when the code runs under Apache. Previously, the code
constructed a horribly complex command, which included a here-document for the
input, and ran it with back-ticks. THAT worked, but was very slow and prone to
breaking in unique and perplexing ways. I would hate to have to revert to the
old version, but I cannot crack this.

I don't know if it makes a difference, but I'm using the list-form when I call
open3 ("open3($chld_in, $chld_out, $chld_err, @command_and_args)") rather than
a string, so as to avoid the extra bash process.

Randy J. Ray      Sunnyvale, CA      http://www.rjray.org   rjray at blackperl.com

Silicon Valley Scale Modelers: http://www.svsm.org

More information about the SanFrancisco-pm mailing list