请注意,如果使用 socket_set_blocking() 设置套接字为非阻塞,则无法使用此函数检查套接字是否已超时。
示例
$status = socket_get_status($fp);
if ($status['timed_out']) {
echo "套接字超时\n";
}
即使套接字已超时,上述条件也不会成立。
我不确定这种行为是未记录还是 bug。无论如何,我在这里发布它,因为它花了一些时间才弄清楚。
此函数是以下函数的别名:stream_get_meta_data().
请注意,如果使用 socket_set_blocking() 设置套接字为非阻塞,则无法使用此函数检查套接字是否已超时。
示例
$status = socket_get_status($fp);
if ($status['timed_out']) {
echo "套接字超时\n";
}
即使套接字已超时,上述条件也不会成立。
我不确定这种行为是未记录还是 bug。无论如何,我在这里发布它,因为它花了一些时间才弄清楚。
此函数在 4.0.4pl1 下对我有效
bytes_left 函数将告诉您套接字 $fp 的缓冲区中还剩下多少字节。假设您没有将 $fp 设置为全局变量
function bytes_left($fp) {
$status = socket_get_status ($fp);
$bytes = $status["unread_bytes"];
return $bytes;
}