socket_select
在指定的超时套接字数组上运行select()系统调用
PHP 4.0.1及以上版本。
socket_select 函数用于等待 socket 上的数据读写事件,它会监听多个 socket 连接的状态变化(如是否有数据可读,是否可以写入数据,是否有异常事件发生)。当指定的事件发生时,函数返回,并告知哪些 socket 可以进行操作。
socket_select(array &$read, array &$write, array &$except, int $tv_sec, int $tv_usec)
成功时返回准备好事件的 socket 数量。如果超时或发生错误则返回 0 或 -1。
<?php // 创建 socket $socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $socket2 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); <p>// 设置连接超时时间<br> socket_connect($socket1, '127.0.0.1', 8080);<br> socket_connect($socket2, '127.0.0.1', 8081);</p> <p>// 创建数组用于监视事件<br> $read = array($socket1, $socket2);<br> $write = null;<br> $except = null;</p> <p>// 调用 socket_select 等待事件<br> $modified_sockets = socket_select($read, $write, $except, 0, 500000);</p> <p>// 判断是否有准备好的 sockets<br> if ($modified_sockets > 0) {<br> echo "有事件发生\n";<br> // 处理准备好的 socket<br> foreach ($read as $socket) {<br> // 读取数据等<br> }<br> } else {<br> echo "超时或出错\n";<br> }<br> ?><br>
该示例展示了如何使用 socket_select 来监听多个 socket 连接的状态。在这个例子中,我们创建了两个 socket 连接,连接到本地的 8080 和 8081 端口。然后我们使用 socket_select 来等待这些 socket 是否有数据可读。函数的返回值告诉我们哪些 socket 发生了事件。