Edit report at https://bugs.php.net/bug.php?id=43219&edit=1
ID: 43219 Comment by: danclax at rambler dot ru Reported by: php at alterego dot dp dot ua Summary: connection_status() can function properly without output Status: Open Type: Feature/Change Request Package: Output Control Operating System: Any PHP Version: 5.2.5RC2 Block user comment: N Private report: N New Comment: PHP 5.3.3, Apache 2.2.15, CentOS 6.2 x86 - issue reproducible! I can't believe it! Bug persists 5 years. For me it's vital feature. Previous Comments: ------------------------------------------------------------------------ [2007-11-08 23:28:52] php at alterego dot dp dot ua Description: ------------ Please regard this comment seriously, it really contains information on how to fix 25266, 22072, 30301 and many other (NOT bogus) bugs under Apache SAPI. >From bug 25266 comment by il...@php.net: > Apache provides a way for PHP to detect if connection was > aborted ONLY and ONLY when PHP is either reading data from > the user or writing back data. That is not true. This link contains description and code (mod_perl) on how to detect disconnection without flushing data: http://www.webreference.com/programming/perl/cookbook/chap4/5.html My untidy but WORKING solution was to add code given below to sapi_apache_flush function and call flush() function before connection_aborted() checks WITHOUT any output. Of course, it would be perfectly logical to add it to connection_aborted function itself, but I could not find any way to call SAPI-specific function from core. Working code is: int fd; struct timeval tv = {0,0}; fd_set set; if (server_context) { request_rec *r = SG(server_context); fd = ap_bfileno(r->connection->client, B_WR); if (fd >= 0) { FD_ZERO(&set); FD_SET(fd, &set); if (select(fd + 1, &set, NULL, NULL, &tv) >= 0 && FD_ISSET(fd, &set)) { php_handle_aborted_connection(); } } } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=43219&edit=1