略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: stream_socket_shutdown

2024-05-16

stream_socket_shutdown

(PHP 5 >= 5.2.1, PHP 7, PHP 8)

stream_socket_shutdownShutdown a full-duplex connection

说明

stream_socket_shutdown(resource $stream, int $mode): bool

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) or STREAM_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($clientSTREAM_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)

参见

  • fclose() - 关闭一个已打开的文件指针
add a noteadd a note

User Contributed Notes 3 notes

up
3
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.
up
1
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.
up
1
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.

官方地址:https://www.php.net/manual/en/function.stream-socket-shutdown.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3