stream_socket_shutdown
(PHP 5 >= 5.2.1, PHP 7, PHP 8)
stream_socket_shutdown — Shutdown a full-duplex connection
说明
Shutdowns (partially or not) a full-duplex connection.
注意:
The associated buffer, or buffers, may or may not be emptied.
参数
stream
-
An open stream (opened with stream_socket_client(), for example)
mode
-
One of the following constants:
STREAM_SHUT_RD
(disable further receptions),STREAM_SHUT_WR
(disable further transmissions) orSTREAM_SHUT_RDWR
(disable further receptions and transmissions).
示例
示例 #1 A stream_socket_shutdown() example
<?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")); // doesn't work now
?>
以上示例的输出类似于:
int(5) Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
+添加备注
用户贡献的备注 3 notes
Daniel J ¶
4 years ago
Be wary of using stream_socket_shutdown with a TLS socket. The socket is closed without sending the "close_notify" message required by TLS protocol.
To correctly close a TLS socket, use fclose() instead, which internally calls OpenSSL's SSL_shutdown() function.
Anonymous ¶
3 years ago
As Daniel J has pointed out, stream_socket_shutdown doesn't send the TLS close_notify message. In some instances, it's a preferred function over fclose (to trigger stream_select, for example).
To use this function correctly with TLS, use stream_socket_enable_crypto($fp, false); before shutting down the socket.
备份地址:http://www.lvesu.com/blog/php/function.stream-socket-shutdown.php