stream_socket_shutdown
(PHP 5 >= 5.2.1, PHP 7, PHP 8)
stream_socket_shutdown — Shutdown a full-duplex connection
说明
stream_socket_shutdown(resource
$stream
, int $mode
): boolShutdowns (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).
返回值
成功时返回 true
, 或者在失败时返回 false
。
范例
示例 #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)

User Contributed Notes 3 notes
Daniel J ¶
1 year 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.
jgotti ¶
9 years ago
Just a note to say that if you encounter problem closing some sockets using fclose in a multi client server, you should really give this one a try.
Spent a full day trying to resolve this issue using stream_socket_shutdown($clientStream,STREAM_SHUT_RDWR);
finally do the trick.
Anonymous ¶
10 months 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