小心使用 stream_socket_shutdown 和 TLS 套接字。套接字在不发送 TLS 协议所需的“close_notify”消息的情况下关闭。
要正确关闭 TLS 套接字,请改用 fclose(),它在内部调用 OpenSSL 的 SSL_shutdown() 函数。
(PHP 5 >= 5.2.1, PHP 7, PHP 8)
stream_socket_shutdown — 关闭全双工连接
(部分或不完全)关闭全双工连接。
注意:
关联的缓冲区可能被清空,也可能不被清空。
stream
一个打开的流(例如,使用 stream_socket_client() 打开)
mode
以下常量之一:STREAM_SHUT_RD
(禁用进一步的接收)、STREAM_SHUT_WR
(禁用进一步的传输)或 STREAM_SHUT_RDWR
(禁用进一步的接收和传输)。
示例 #1 一个 stream_socket_shutdown() 示例
<?php
$server = stream_socket_server('tcp://127.0.0.1:1337');
$client = stream_socket_client('tcp://127.0.0.1:1337');
var_dump(fputs($client, "hello"));
stream_socket_shutdown($client, STREAM_SHUT_WR);
var_dump(fputs($client, "hello")); // 现在不起作用了
?>
上面的示例将输出类似于
int(5) Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
小心使用 stream_socket_shutdown 和 TLS 套接字。套接字在不发送 TLS 协议所需的“close_notify”消息的情况下关闭。
要正确关闭 TLS 套接字,请改用 fclose(),它在内部调用 OpenSSL 的 SSL_shutdown() 函数。