Bug #68432 [Opn->Nab]: socket_read
| From: | requinix@php.net | Date: | Tue, 18 Nov 2014 08:24:33 +0000 |
| Subject: | Bug #68432 [Opn->Nab]: socket_read | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-188655@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=68432&edit=1
ID: 68432
Updated by: requinix@php.net
Reported by: cheeto_crunch at yahoo dot com
Summary: socket_read
-Status: Open
+Status: Not a bug
Type: Bug
Package: Sockets related
Operating System: Debian / Irrelevant
PHP Version: 5.6Git-2014-11-17 (Git)
Block user comment: N
Private report: N
New Comment:
Not a problem.
Previous Comments:
------------------------------------------------------------------------
[2014-11-18 07:44:06] cheeto_crunch at yahoo dot com
I believe you're correct. It seems to only reach the sock_read part of the code on disconnect.
I appear to be incorrect about a bug existing, though this issue has created a fun problem for me to
solve, lol.
Thank you for your time. My apologies for the error on my behalf.
------------------------------------------------------------------------
[2014-11-17 05:22:29] requinix@php.net
That code never even reaches the call to socket_read(); verify that with
$buf = socket_read($hub, 4096, PHP_NORMAL_READ);
doDebug("socket_read: $buf");
in client.php.
The fact that socket_recv() returns all the values at once is a race condition - on my Windows
machine I get one at a time, but if I sleep(1) after the hubConnect() then I get the same results as
you. (It also doesn't do the PHP_NORMAL_READ thing, of course.)
Now, if I keep the sleep(1) and new doDebug, and remove the while loop on socket_recv(),
socket_read() kicks in and gives one value at a time.
Can you revise the repro code, or does what I just said explain away your problem?
------------------------------------------------------------------------
[2014-11-17 05:08:31] cheeto_crunch at yahoo dot com
The source code that duplicates this error can be found here:
http://ethernetweb.com/stuff/php-socket_read-bug.tgz
Result from client side:
cserver@dns:~/bug/client$ php client.php
DEBUG: hubConnect: Connecting to 107.150.12.152:40465...
DEBUG: hubConnect: Connect success. (Resource id #7)
DEBUG: socket_recv: 1. test1
2. test1
3. test1
4. test1
5. test1
6. test1
7. test1
8. test1
9. test1
10. test1
DEBUG: socket_recv: 1. test2
DEBUG: socket_recv: 2. test2
DEBUG: socket_recv: 3. test2
DEBUG: socket_recv: 4. test2
DEBUG: socket_recv: 5. test2
------------------------------------------------------------------------
[2014-11-17 04:14:51] requinix@php.net
Not much to do until we can see that code. Reopen this when you have it ready.
------------------------------------------------------------------------
[2014-11-17 03:57:26] cheeto_crunch at yahoo dot com
Description:
------------
According to the PHP documentation, http://php.net/manual/en/function.socket-read.php,
the type PHP_NORMAL_READ - reading stops at \n or \r. It is supposed to stop that read function
after a \n or \r but it does not.
How to duplicate: Create a client and a server, both in php. From the server, send multiple fast
consecutive socket_write functions to the client. The client will read them all as one packet
instead of separating them based on the \n or \r of the packet received.
Test script:
---------------
Will be pulling my code apart to recreate the bug. This will take some time as I will not be
providing my entire code. (It would greatly complicate the issue).
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=68432&edit=1