在 TLS socket 上使用 stream_socket_shutdown 時要小心。socket 會在沒有發送 TLS 協定所需的「close_notify」訊息的情況下關閉。
要正確關閉 TLS socket,請改用 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)
在 TLS socket 上使用 stream_socket_shutdown 時要小心。socket 會在沒有發送 TLS 協定所需的「close_notify」訊息的情況下關閉。
要正確關閉 TLS socket,請改用 fclose(),它會在內部呼叫 OpenSSL 的 SSL_shutdown() 函式。