http://blog.csdn.net/tongnianhani/article/details/73695314在这篇文章中我们已经简单介绍了stream_socket_pair函 数的简单用法,如果你还不熟悉他的用法,可以点击进去先看下这个函数的用法,因为我们接下来要介绍的stream_select函数的用法时会用到这个函数;
简单说stream_select 函数就是返回参数$read,$write已经可读或者可写状态的的数量,如果基本可读也不可写则超时时间过后就会返回0,从文档介绍中可以看到
int
stream_select (
array
&$read
,
array &$write
,
array &$except
,
int $tv_sec
[,
int $tv_usec
= 0 ] ) 前三个参数都是引用,所以如果不可读则$read返回的是空数组,$write也是同理,举例说明
<?php
$sockets = stream_socket_pair ( STREAM_PF_UNIX , STREAM_SOCK_STREAM , STREAM_IPPROTO_IP );
$pid = pcntl_fork ();
$timeout = 2;
if ( $pid == - 1 ) {
die( 'could not fork' );
} else if ( $pid ) {
/* parent */
fclose ( $sockets [ 0 ]);
fwrite ( $sockets [ 1 ], "child PID: $pid \n" );
fwrite ( $sockets [ 0 ], "message from child\n" );
$str = stream_select($sockets,$w=null,$e=null,$timeout);var_dump($str);var_dump($sockets);
echo 'main-'.fgets ( $sockets [ 1 ]);
//echo 'child-'.fgets ( $sockets [ 0 ]);
fclose ( $sockets [ 1 ]);
} else {
/* child */
fclose ( $sockets [ 1 ]);
fwrite ( $sockets [ 0 ], "message from child\n" );
echo 'child-'.fgets ( $sockets [ 0 ]);
$str = stream_select($sockets,$w=null,$e=null,$timeout);var_dump($str);var_dump($sockets);
fclose ( $sockets [ 0 ]);
}
上面的例子返回的结果为:
child-child PID: 2510
int(1)
array(1) {
[1] =>
resource(5) of type (stream)
}
main-message from child
int(1)
array(1) {
[0] =>
resource(4) of type (stream)
}
如果没有可读内容,则返回空数组,代码如下
<?php
$sockets = stream_socket_pair ( STREAM_PF_UNIX , STREAM_SOCK_STREAM , STREAM_IPPROTO_IP );
$pid = pcntl_fork ();
$timeout = 2;
$str = stream_select($sockets,$w=null,$e=null,$timeout);var_dump($str);var_dump($sockets);
输出结果:
int(0)
array(0) {
}