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

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



Previous Comments:
------------------------------------------------------------------------
[2010-08-11 20:29:25] jim_ivers at americantours dot com

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.

------------------------------------------------------------------------
[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