php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #14578 socket_read() behavior
Submitted: 2001-12-18 08:35 UTC Modified: 2002-01-28 10:43 UTC
From: martin at humany dot com Assigned:
Status: Closed Package: Sockets related
PHP Version: 4.1.0 OS: Windows 2000
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: martin at humany dot com
New email:
PHP Version: OS:

 

 [2001-12-18 08:35 UTC] martin at humany dot com
I call socket_read() like this:

$data = socket_read($handle, 80, PHP_BINARY_READ);
and get 80 byte back. i made a loop to continue read until strlen($data) < 80 (just experimenting):
--
$cnt = 0;
do {
$row = socket_read($irc, 80, PHP_BINARY_READ);
$cnt .= strlen($row);
if (strlen($row) < 80) break;
}
echo "$cnt bytes read";
--
This gives me 1027 bytes of data, even though there is more data left to read, the last read only returns 67 bytes of data.

if i call socket_read() with 2048 as size, i also only get 1027 bytes back


So i worked around this in my example loop like this:


$cnt = 0;
do {
$row = socket_read($irc, 1028, PHP_BINARY_READ);
$cnt .= strlen($row);
if (strlen($row) < 1028) break;
}
echo "$cnt bytes read";


Wich works, and reads everything for me. But is this really the expected behaviour?

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-12-18 08:37 UTC] martin at humany dot com
Hm in my last example there should be 
--
$cnt = 0;
do {
$row = socket_read($irc, 1027, PHP_BINARY_READ);
$cnt .= strlen($row);
if (strlen($row) < 1027) break;
}
echo "$cnt bytes read";
--

of course, not 1028 :)
 [2002-01-28 10:43 UTC] sterling@php.net
This is not a php issue, this is either a winsock or programmer issue.  The fact that socket_read() returns correctly, means that socket_read() is correct (cause all we do is map socket_read() to a recv() call).
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 01:01:30 2024 UTC