Bug #68432 [Opn->Nab]: socket_read

From: 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

« previous php.bugs (#188655) next »