|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2017-09-29 11:13 UTC] requinix@php.net
-Status: Open
+Status: Feedback
[2017-09-29 11:13 UTC] requinix@php.net
[2017-09-29 13:18 UTC] privacy dot and dot spam dot protection at gmx dot fr
-Status: Feedback
+Status: Open
[2017-09-29 13:18 UTC] privacy dot and dot spam dot protection at gmx dot fr
[2021-06-02 11:00 UTC] cmb@php.net
-Status: Open
+Status: Feedback
-Assigned To:
+Assigned To: cmb
[2021-06-02 11:00 UTC] cmb@php.net
[2021-06-13 04:22 UTC] php-bugs at lists dot php dot net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 13:00:01 2025 UTC |
Description: ------------ According to documentation, an empty string ("") is returned by socket_read() when there's no more data to read and false value on error (including if the remote host has closed the connection). However when socket_read has no data to read false is still returned. So it's impossible to detect if connection has been reseted by pear. Test script: --------------- $co = false; while (!$co) { $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket !== false) echo "OK 1.\n"; $result = socket_connect($socket, $address, $service_port); if ($socket !== false) { socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 1)); echo "OK 2.\n"; $co = true; } } while (true) { socket_clear_error($socket); $out = socket_read($socket, 2048); $socket_last_error = socket_last_error($socket); $strErr = socket_strerror($socket_last_error) . ' ' . $socket_last_error; echo date('Ymd H:i:s') . " : $strErr ($socket_last_error) => " . var_export($out, true) . PHP_EOL; } Expected result: ---------------- OK 1. Try connection '9.3.0.23' on port '30001'... OK 2. // client's connected on server // no data have been sent by server 20170929 11:09:17 : Success 0 (0) => '' 20170929 11:09:18 : Success 0 (0) => '' 20170929 11:09:19 : Success 0 (0) => '' //server send data 20170929 11:09:19 : Success 0 (0) => 'a' 20170929 11:09:19 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' // no data have been sent by server 20170929 11:09:21 : Success 0 (0) => '' 20170929 11:09:22 : Success 0 (0) => '' 20170929 11:09:23 : Success 0 (0) => '' // connection is reset by server 20170929 11:09:24 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:25 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:26 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:27 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:28 : Resource temporarily unavailable 11 (11) => false Actual result: -------------- OK 1. Try connection '9.3.0.23' on port '30001'... OK 2. // client's connected on server // no data have been sent by server 20170929 11:09:17 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:18 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:19 : Resource temporarily unavailable 11 (11) => false //server send data 20170929 11:09:19 : Success 0 (0) => 'a' 20170929 11:09:19 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' 20170929 11:09:20 : Success 0 (0) => 'a' // no data have been sent by server 20170929 11:09:21 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:22 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:23 : Resource temporarily unavailable 11 (11) => false // connection is reset by server 20170929 11:09:24 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:25 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:26 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:27 : Resource temporarily unavailable 11 (11) => false 20170929 11:09:28 : Resource temporarily unavailable 11 (11) => false