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

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