Edit report at http://bugs.php.net/bug.php?id=52571&edit=1

 ID:                 52571
 User updated by:    jim_ivers at americantours dot com
 Reported by:        jim_ivers at americantours dot com
 Summary:            socket_read function returns max 1305 bytes remote,
                     OK local
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            Streams related
 Operating System:   Centos 5 (redhat clone)
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

To clarify, the socket server is remote or local, the php code is always
local.



Turns out one of the libraries on the remote server is using unicode, 4
bytes to the character. Thus the string it is trying to return is 4
times as long as the string length.


Previous Comments:
------------------------------------------------------------------------
[2010-08-09 22:45:00] jim_ivers at americantours dot com

Description:
------------
I have a php script running on apache that reads a string from a TCP
socket on a server. Using the below script on a local server works. I
cannot get it to return more than 1305 bytes remotely. The remote server
reports sending the whole string (about 4K bytes) back. 



The following is a short version of the code below:

   while(($sting = socket_read($socket,  $slen, PHP_BINARY_READ)) !==
false) {

        $out = $out.$sting;

        if(strlen($out) >= $slen) break;

   }



I get a warning that the socket closed, then the string:

<b>Warning</b>:  socket_read() [<a
href='function.socket-read'>function.socket-read</a>]: unable to read
from socket [104]: Connection reset by peer in
<b>/usr/local/apache2/htdocs/mikidel.php</b> on line <b>473</b><br />

"returnstringabcdefg....."



using php 5.3.3 w Apache/2.2.14 (Unix) PHP/5.3.3 on Centos 5 ( redhat
clone)



./configure --enable-xml --enable-dom --with-openssl --enable-sockets
--enable-debug --with-config-file-path=/etc  --with-curl --with-zlib
--enable-ftp  --enable-soap --with-sybase-ct=/sybase
--with-libxml-dir=/usr  --prefix=/usr/local/apache2/php
--with-config-file-path=/usr/local/apache/php --with-gettext
--with-apxs2=/usr/local/apache2/bin/apxs



php.ini standard vanilla



note that the remote socket is C code, and I have tried using
write(socket...) and send(socket...). Both work locally since there are
no \n or \r. Neither work remotely.





Test script:
---------------
   // Create a TCP/IP Socket

   $socket = socket_create (AF_INET, SOCK_STREAM, 0);

   if ($socket < 0) { echo "socket() failed: reason: " . strerror
($socket) . "\n"; }



   // Connect to Target

   $result = socket_connect ($socket, $address, $service_port);

   if ($result < 0) { echo "connect() failed.\nReason: ($result) " .
strerror($result) . "\n"; }



   $tmp = socket_read ($socket, 6, PHP_BINARY_READ);

   $slen = (int)($tmp-6);

   $out = (string)$tmp;



$sting = socket_read($socket, $slen, PHP_BINARY_READ);

$out = $out.$sting;



   while(($sting = socket_read($socket,  $slen, PHP_BINARY_READ)) !==
false) {

        $out = $out.$sting;

        if(strlen($out) >= $slen) break;

   }



   // Close Socket

   socket_close ($socket);



   return $out."\n";

Expected result:
----------------
The script should work remotely since it works locally.



Obviously if I ask for 4k bytes from a remote socket, it should return
4k bytes, since it does so from a local socket.

Actual result:
--------------
<b>Warning</b>:  socket_read() [<a
href='function.socket-read'>function.socket-read</a>]: unable to read
from socket [104]: Connection reset by peer in
<b>/usr/local/apache2/htdocs/mikidel.php</b> on line <b>473</b><br />

"returnstringabcdefg....."


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=52571&edit=1

Reply via email to