Keep Server Online
If you find the Apache Lounge, the downloads and overall help useful, please express your satisfaction with a donation.
or
A donation makes a contribution towards the costs, the time and effort that's going in this site and building.
Thank You! Steffen
Your donations will help to keep this site alive and well, and continuing building binaries. Apache Lounge is not sponsored.
| |
|
Topic: How to Stop Apache Killing Perl on close Sockets |
|
Author |
|
IanSteigrad
Joined: 13 Sep 2010 Posts: 1 Location: Australia
|
Posted: Mon 13 Sep '10 5:37 Post subject: How to Stop Apache Killing Perl on close Sockets |
|
|
Hi All,
I'm trying to execute the following code on Apache 2.2 running Perl 5.10 on Windows 32:
Code: | use CGI qw/:standard/;
print header;
print "<HTML>RETURN TO BROWSER</HTML>";
close STDIN;close STDOUT; close STDERR;
sleep(5);
...spool a bunch of emails out to a smtp server... |
As you can see, I'm tyrying to return quickly to the client and set the server off running a longer pocess (spooling emails to a smpt server). If I can make this work, i'll get it to update another html page periodically during the process.
The script works fine if I simply execute it from the command line using perl however, when I execute it from apache, the close STDIN;close STDOUT; close STDERR; line causes the Perls script to terminate. I've tried running Apache as admin to see if that helps but the same thing occurs.
It seems that Apache is killing the perl process when I close the socket handles - this occurs even if I use fork() - as soon as the socket handles are closed, the perl.exe terminates, if I dont close the socket handles, then the client browser times out as it waits for the long running process to finish.
I've seen many posts (presumably from unix users) describing how to do this but I can seem to make it work in Windows. I could use a Perl script to write an external perl file and then use Win32::Process to call the perl executable and run the file but if I do that, I have to write all the variables into the temporary perl file which seems a very long-winded way to get my desired outcome.
Any suggestions much appreciated! |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Thu 23 Sep '10 23:29 Post subject: |
|
|
I'm not into perl, but AFAIK STDIN, STDOUT and STDERR is only available on the command line and not running over apache. Why do you need to close those? |
|
Back to top |
|
|
|
|
|
|