Indonesian CGIProxy:   [ UP ]   [Manage cookies]
mod_perl logo perl icon
previous page: Apache::Symbol - Things for symbol thingspage up: mod_perl 1.0 APInext page: Apache::PerlSections - Utilities for work with Perl sections

Apache::SIG - Override apache signal handlers with Perl's






The mod_perl Developer's Cookbook

The mod_perl Developer's Cookbook

By Geoffrey Young, Paul Lindner, Randy Kobes
mod_perl Pocket Reference

mod_perl Pocket Reference

By Andrew Ford
Writing Apache Modules with Perl and C

Writing Apache Modules with Perl and C

By Lincoln Stein, Doug MacEachern
Embedding Perl in HTML with Mason

Embedding Perl in HTML with Mason

By Dave Rolsky, Ken Williams
mod_perl2 User's Guide

mod_perl2 User's Guide

By Stas Bekman, Jim Brandt
Practical mod_perl

Practical mod_perl

By Stas Bekman, Eric Cholet


Table of Contents

Synopsis

  PerlFixupHandler Apache::SIG


TOP

Description

When a client drops a connection and apache is in the middle of a write, a timeout will occur and httpd sends a SIGPIPE. When apache's SIGPIPE handler is used, Perl may be left in the middle of it's eval context, causing bizarre errors during subsequent requests are handled by that child. When Apache::SIG is used, it installs a different SIGPIPE handler which rewinds the context to make sure Perl is back to normal state, preventing these bizarre errors.

If you would like to log when a request was cancelled by a SIGPIPE in your Apache access_log, you can declare Apache::SIG as a handler (any Perl*Handler will do, as long as it is run before PerlHandler, e.g. PerlFixupHandler), and you must also define a custom LogFormat in your httpd.conf, like so:

  PerlFixupHandler Apache::SIG
  LogFormat "%h %l %u %t \"%r\" %s %b %{SIGPIPE}e"

If the server has noticed that the request was cancelled via a SIGPIPE, then the log line will end with 1, otherwise it will just be a dash.



TOP

Caveats

The signal handler in this package uses the subprocess_env table of the main request object to supply the SIGPIPE "environment variable" to the log handler. If you already use the key SIGPIPE in your subprocess_env table, then you can redefine the key like this:

  $Apache::SIG::PipeKey = 'my_SIGPIPE';

and log it like this:

  LogFormat "%h %l %u %t \"%r\" %s %b %{my_SIGPIPE}e"


TOP

Maintainers

Maintainer is the person(s) you should contact with updates, corrections and patches.



TOP

Authors

  • Doug MacEachern
  • Doug Bagley

Only the major authors are listed above. For contributors see the Changes file.



TOP

See Also

perlvar(1)






TOP
previous page: Apache::Symbol - Things for symbol thingspage up: mod_perl 1.0 APInext page: Apache::PerlSections - Utilities for work with Perl sections