Bug #70813 [Fbk->NoF]: connection_status(), connection_aborted() not working

From: Date: Sun, 17 Oct 2021 04:22:08 +0000
Subject: Bug #70813 [Fbk->NoF]: connection_status(), connection_aborted() not working
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-237234@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70813&edit=1

 ID:               70813
 Updated by:       php-bugs@lists.php.net
 Reported by:      sivann at gmail dot com
 Summary:          connection_status(), connection_aborted() not working
-Status:           Feedback
+Status:           No Feedback
 Type:             Bug
 Package:          Network related
 Operating System: Fedora 22
 PHP Version:      5.6.14
 Assigned To:      cmb
 Private report:   N

 New Comment:

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.


Previous Comments:
------------------------------------------------------------------------
[2021-10-07 12:32:27] cmb@php.net

> The script never stops running.

This is what I cannot reproduce.

------------------------------------------------------------------------
[2021-10-07 12:31:31] cmb@php.net

I cannot reproduce that with PHP-7.4 on Windows, neither with
httpd nor with the built-in server.  Is this still an issue for
you with any of the actively supported PHP versions[1]?

> connection_status(), connection_aborted () never detect closed
> remote connection.

You must ignore user aborts for these functions to work as
expected[2].

[1] <https://www.php.net/supported-versions.php>
[2] <https://www.php.net/manual/en/features.connection-handling.php>

------------------------------------------------------------------------
[2015-10-29 15:11:42] sivann at gmail dot com

httpd-2.4.16 (apache)

------------------------------------------------------------------------
[2015-10-29 14:59:55] sivann at gmail dot com

Description:
------------
connection_status(), connection_aborted () never detect closed remote connection.

After closing connection initiated from client (e.g. wget) connection state becomes CLOSE_WAIT from
ESTABLISHED, but those two functions called in a loop never detect that, even when outputing data.

Current solution is to popen netstat, or parse /proc/net/tcp, /proc/net/tcp6 to find if connection
is established.

connection_status/connection_aborted should detect the connection loss even without writing
anything. Currently those functions do nothing.

Test script:
---------------
<?php
ignore_user_abort(false);
function fecho($str) {
    file_put_contents("conlog.txt",$str."",FILE_APPEND);
}
while (1) {
    sleep (1);
    $d=date(DATE_RFC2822);
    $remport=$_SERVER['REMOTE_PORT'];
    $remip =
$_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
   
file_put_contents("conlog.txt","date:$d\tip:$remip\tport:$remport\tstatus:$constatus\n",FILE_APPEND);
    echo "...\n"; 
    flush();
    if (connection_status()!= CONNECTION_NORMAL){ //never works
        file_put_contents("conlog.txt","connection closed\n",FILE_APPEND);
        break;
    }
    file_put_contents("conlog.txt","connection_status=".connection_status().
        " connection_aborted():".connection_aborted()."\n",FILE_APPEND);
}
?>


Expected result:
----------------
The above writes on a file named conlog.txt. Call the above script with wget. The script should
start writing data to conlog.txt at the server. Then press Ctrl+C to stop wget. The script should
end. 



Actual result:
--------------
The script never stops running.


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=70813&edit=1


Thread (14 messages)

« previous php.bugs (#237234) next »