PHP socket_set_blocking() 函数设置流上的阻塞或非阻塞模式。此函数适用于任何支持非阻塞模式的流(当前为常规文件和套接字流)。该函数是 stream_set_blocking() 函数的别名。
语法
socket_set_blocking(stream, enable)
参数
stream | 必填。 指定流。 |
enable | 必填。 如果enable为false,给定的流将切换到非阻塞模式,如果为true,则将切换到阻塞模式。这会影响 fgets() 和 等调用fread() 从流中读取。在非阻塞模式下, fgets() 调用将始终立即返回,而在阻塞模式下,它将等待数据可用 |
返回值
成功时返回 true,失败时返回 false。
示例:
下面的示例显示了socket_set_blocking()函数的用法。
<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
echo "Unable to open\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
socket_set_blocking($fp, true);
$res = fread($fp, 1000);
$info = socket_get_status($fp);
fclose($fp);
if ($info['timed_out']) {
echo 'Connection timed out!';
} else {
echo $res;
}
}
?>
上述代码的输出将类似于:
HTTP/1.0 404 Not Found
Content-Type: text/html
Date: Sun, 24 Oct 2021 04:58:59 GMT
Server: ECS (dna/63B4)
Content-Length: 345
Connection: close
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>404 - Not Found</title>
</head>
<body>
<h1>404 - Not Found</h1>
</body>
</html>