Re: socket_write buffer problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi List

I have been banging my head against a wall all day trying to work this problem
out. To recap my earlier post, I have a simple socket listener that handles the
incoming string fine with socket_read and then it fires off the application as
it should. When it returns the data to the socket only the first 1024 bytes get
sent.

I have done some testing and for the life of me I can not find a way to loop
through the buffer. Everything I try still results in only the first 1024 bytes.

Here is the code I have been trying

while(true)
        {
                $client = socket_accept($socket);
                
                $arev_data = socket_read($client, 1024);
                
                $yresponse = build_XML_request($arev_data);

                if (strlen ($yresponse) < 1024)
                {
                        socket_write($client, $yresponse);
                }
                else
                {       
                        while (strlen($yresponse) > 0)
                        {
                                if (strlen ($yresponse) > 1024)
                                {       
                                        $out = substr($yresponse, 0, 1024);
                                        socket_write($client, $out, strlen($out));
                                        $yresponse = substr_replace($yresponse,'',0,1024);
                                }
                                else
                                {
                                        socket_write($client, $yresponse);
                                        print "$yresponse ";
                                        $yresponse = substr_replace($yresponse,'',0,strlen($yresponse));
                                }
                        
                        }

                } 
                
                socket_close($client);
        }

Just for testing I cave an if statement that takes care of the case where there
is a data string of less than 1024 bytes. The problem starts when I get into the
else case where the$response is larger than 1024 bytes. The if statement seems
OK and the first time through when the test data is 1521 bytes the first 1024
bytes gets returned by the socket_write. I then get rid of the first 1024 bytes
of the string and the if statement falls through to the else as the string is
now only 497 bytes left in the $ypsilon string. I see nothing returned to the
client by the socket_write here however the print "$yresponse \n"; prints the
data. I can not work out why the socket_write is not writing the data to the
socket at this point.

Does anyone have any clues?

Regards,
Richard Luckhurst                      
Product Development
Exodus Systems - Sydney, Australia.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux