Edit report at http://bugs.php.net/bug.php?id=54917&edit=1
ID: 54917 Updated by: [email protected] Reported by: euxomen at mail dot ru Summary: Incorrect behavior of the sockets functions when using HTTP-connections -Status: Open +Status: Bogus Type: Bug Package: Sockets related Operating System: Windows 7, Ubuntu 10.10 PHP Version: 5.3SVN-2011-05-24 (snap) Block user comment: N Private report: N New Comment: Your script is wrong. feof() will not return true until the connection has timedout, which means your second request never gets written. If you change the while loop to read the content-length data after the headers it will work fine. Previous Comments: ------------------------------------------------------------------------ [2011-05-24 15:46:14] euxomen at mail dot ru Description: ------------ When I try to make HTTP keep-alive connection, script behaves ununderstood. When I am making two request per one connection, using header "Connection:keep- alive", script processes only one. Second request, although it was written into socket, it returns an empty result, due to the fact that the pointer is EOF. Test script: --------------- <?php /* file 1.txt on localhost contains text: 1 file 2.txt on localhost contains text: 2 */ function run($fp, $c, $u) { if ($fp) { fwrite($fp, "GET {$u} HTTP/1.0\r\nHost: localhost\r\nConnection: {$c}\r\n\r\n"); $data = ''; while (!feof($fp)) { $data .= fgets($fp); } return $data; } } //trying to use keep-alive $fp = stream_socket_client("tcp://localhost:80", $errno, $errstr, 30); echo run($fp, "keep-alive", "/1.txt"); echo run($fp, "keep-alive", "/2.txt"); fclose($fp); //trying to use close $fp = stream_socket_client("tcp://localhost:80", $errno, $errstr, 30); echo run($fp, "close", "/1.txt"); fclose($fp); $fp = stream_socket_client("tcp://localhost:80", $errno, $errstr, 30); echo run($fp, "close", "/2.txt"); fclose($fp); Expected result: ---------------- HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:50 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:42 GMT ETag: "3200000001c164-3-4a405662479e4" Accept-Ranges: bytes Content-Length: 3 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/plain 1 HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:50 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:42 GMT ETag: "3200000001c164-3-4a405662479e4" Accept-Ranges: bytes Content-Length: 3 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/plain 2 HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:57 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:42 GMT ETag: "3200000001c164-3-4a405662479e4" Accept-Ranges: bytes Content-Length: 3 Connection: close Content-Type: text/plain 1 HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:58 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:53 GMT ETag: "1700000001c166-1-4a40566ce2b4c" Accept-Ranges: bytes Content-Length: 1 Connection: close Content-Type: text/plain 2 Actual result: -------------- HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:50 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:42 GMT ETag: "3200000001c164-3-4a405662479e4" Accept-Ranges: bytes Content-Length: 3 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/plain 1 HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:57 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:42 GMT ETag: "3200000001c164-3-4a405662479e4" Accept-Ranges: bytes Content-Length: 3 Connection: close Content-Type: text/plain 1 HTTP/1.1 200 OK Date: Tue, 24 May 2011 13:35:58 GMT Server: Apache Last-Modified: Tue, 24 May 2011 13:16:53 GMT ETag: "1700000001c166-1-4a40566ce2b4c" Accept-Ranges: bytes Content-Length: 1 Connection: close Content-Type: text/plain 2 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54917&edit=1
