네트워크로부터 들어온 TCP데이터는 수신버퍼에 저장됩니다.
이 수신버퍼에 저장 된 값을 pid_recv함수로 읽습니다.
pid_recv함수는 다음과 같이 사용합니다.
pid_recv($pid, $value[, $len]);
이 예제는 매 초마다 TCP로 수신되는 데이터를 확인하고 출력합니다.
<?php
$rdata = "";
$pid = pid_open("/mmap/tcp0"); // 0번 TCP 열기
pid_bind($pid, "", 0); // 바인딩
pid_connect($pid, "10.1.0.2", 1470); // TCP 접속
do
{
sleep(1);
$state = pid_ioctl($pid, "get state"); // TCP세션 상태 확인
$rxlen = pid_ioctl($pid, "get rxlen"); // 수신 데이터 크기 확인
$rlen = pid_recv($pid, $rdata, $rxlen); // 데이터 읽기
echo "rlen = $rlen / "; // 읽은 데이터 크기 출력
echo "rdata = $rdata\r\n"; // 읽은 데이터 출력
if($rlen)
$rdata = ""; // 수신버퍼 초기화
}
while($state == TCP_CONNECTED);
pid_close($pid);
?>
pid_send함수를 이용해 송신한 데이터는 송신버퍼에 저장되었다가 네트워크로 전송됩니다.
pid_send함수는 다음과 같이 사용합니다.
pid_send($pid, $value[, $len]);
이 예제는 송신버퍼의 여유공간을 확인하여 TCP로 데이터를 송신합니다.
<?php
$sdata = "0123456789";
$pid = pid_open("/mmap/tcp0"); // 0번 TCP 열기
pid_bind($pid, "", 0); // 바인딩
pid_connect($pid, "10.1.0.2", 1470); // TCP 접속
do
{
sleep(1);
$state = pid_ioctl($pid, "get state"); // TCP세션 상태 확인
$txfree = pid_ioctl($pid, "get txfree"); // 버퍼 여유공간 확인
$tx_len = pid_send($pid, $sdata, $txfree); // 데이터 송신
echo "tx len = $tx_len\r\n"; // 송신 한 데이터 크기 출력
}
while($state == TCP_CONNECTED);
pid_close($pid);
?>
위 코드에서 pid_send함수의 세 번째 인수는 송신할 데이터의 크기를 의미합니다. 송신 데이터크기가 송신버퍼의 여유공간보다 크면 데이터가 유실될 수 있습니다. 따라서 항상 버퍼 여유공간을 확인한 후 그 값 또는 그 이하로 쓰기 데이터 크기를 설정하는 것을 권장합니다.