int pid_peek ( int $pid, mixed &$rbuf [ , int $rlen ] )
pid_peek() пытается прочитать до $len байты из порта или периферического $pid в буфер $buf без удаления данных из буфера внутреннего устройства, так что его можно прочитать позже. Данная функция полезна для проверки содержимого данных перед чтением.
В случае успеха, количество прочитанных байтов возвращается, в противном случае появляется PHP error.
Однако, это не является ошибкой, если число меньше, чем число запрошенных байтов. Это случается в том случае, если длина доступных данных в буфере устройства меньше желаемой длины.
<?php
$buf = "";
$pid = pid_open("/mmap/tcp0");
pid_connect($pid, "10.3.0.10", 1470);
do
{
$state = pid_ioctl($pid, "get state"); // get the current TCP state
if($state == TCP_CLOSED) // if TCP connection attempt fails, try to connect again
{
pid_connect($pid, "10.3.0.10", 1470);
sleep(1);
}
}while($state != TCP_CONNECTED);
echo "TCP connected\r\n";
while(1)
{
$len = pid_peek($pid, $buf); // reading $buf but leaving data in the buffer
if($len == 0) continue;
$pos = strpos($buf, "\r\n"); // checking if there is "\r\n" string
if($pos === FALSE) continue;
$len = pid_recv($pid, $buf, $pos+2); // reading data (ending "\r\n") from ther buffer
echo "$buf";
}
?>
pid_read() / pid_recv() / pid_recvfrom()
Отсутствуют.