Я получаю очень странное поведение при использовании socket_read () в linux.
Я использую socket_read с ограничением буфера 2048.
В то время как в моей системе Windows он получаетВ целом, на моем сервере Linux он просто получает первый байт ответа.
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!socket_connect($sock, 'my-server.dyndns.org', 8888)) {
die('no connect');
}
$req = 'request';
socket_write($sock, $req);
if (false !== ($buf = socket_read($sock, 2048)) {
echo $buf; // This only contains the first byte of the response.
}
socket_close($sock);
Если я снова вызываю socket_read (), он получает остальную часть строки:
// This works:
while((false !== ($buf = socket_read($sock, 2048)))) {
echo "Read ".strlen($buf)." bytes from socket_read().\n";
if ($buf == "") break;
$b .= $buf;
sleep(1);
}
/* Output:
*
* Read 1 bytes from socket_read().
* Read 307 bytes from socket_read().
* Read 0 bytes from socket_read().
* Done.
*/
Если я подожду 2 секунды перед вызовом socket_read (), я также получу действительный ответ:
// This also works:
sleep(2);
if (false !== ($buf = socket_read($sock, 2048)) {
echo $buf; // all 308 bytes are read correctly.
}
Разве socket_read () не должен ждать заполнения буфера или конца строки?
Что я делаю не так?