Данные, полученные из сети по протоколу TCP, сохраняются в буфере приема. Функция pid_recv необходима для чтения данных.
Ниже показано, как использовать функцию pid_recv.
pid_recv($pid, $value[, $len]);
В данном примере выполнятеся проверка и вывод полученных TCP-данных каждую секунду.
$rdata = "";
$pid = pid_open("/mmap/tcp0"); // open TCP 0
pid_connect($pid, "10.1.0.2", 1470); // TCP active connection
do
{
sleep(1);
$state = pid_ioctl($pid, "get state"); // get TCP session state
$rxlen = pid_ioctl($pid, "get rxlen"); // get received data size
$rlen = pid_recv($pid, $rdata, $rxlen); // receive data
echo "rlen = $rlen / "; // print received data size
echo "rdata = $rdata\r\n"; // print received data
if($rlen)
$rdata = ""; // flush receive buffer
}
while($state == TCP_CONNECTED);
pid_close($pid);
Данные, отправленные функцией pid_send, сохраняются в буфере отправки и передаются в сеть по протоколу TCP.
Ниже показано, как использовать функцию pid_send.
pid_send($pid, $value[, $len]);
Данный пример показывает отправку данных в сеть по протоколу TCP, проверяя доступное пространство буфера отправки каждую секунду.
$sdata = "0123456789";
$pid = pid_open("/mmap/tcp0"); // open TCP 0
pid_connect($pid, "10.1.0.2", 1470); // TCP active connection
do
{
sleep(1);
$state = pid_ioctl($pid, "get state"); // get session state
// get available space of send buffer
$txfree = pid_ioctl($pid, "get txfree");
$tx_len = pid_send($pid, $sdata, $txfree); // send data
echo "tx len = $tx_len\r\n"; // print size of send data
}
while($state == TCP_CONNECTED);
pid_close($pid);
Третий агрумент функции pid_send означает длину отправляемых данных. Во избежание потери данных, длина отправляемых данных должна быть меньше, чем оставшийся размер данных буфера. Настоятельно рекомендуется проверить оставшийся размер буфера отправки перед отправкой данных.