stream_socket_shutdown
(PHP 5 >= 5.2.1, PHP 7)
stream_socket_shutdown — Закрывает полнодуплексное соединение
Описание
$stream
, int $how
)Закрывает (частично или нет) полнодуплексное соединение.
Список параметров
-
stream
-
Открытый поток (открытый при помощи функции stream_socket_client(), например)
-
how
-
Одна из следующих констант:
STREAM_SHUT_RD
(отключает последующее получение данных),STREAM_SHUT_WR
(отключает последующую передачу данных) илиSTREAM_SHUT_RDWR
(отключает последующие получение и передачу данных).
Возвращаемые значения
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Примеры
Пример #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, "привет"));
stream_socket_shutdown($client, STREAM_SHUT_WR);
var_dump(fputs($client, "привет")); // не работает сейчас
?>
Результатом выполнения данного примера будет что-то подобное:
int(5) Notice: fputs(): send of 6 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Потоки
- set_socket_blocking
- stream_bucket_append
- stream_bucket_make_writeable
- stream_bucket_new
- stream_bucket_prepend
- stream_context_create
- stream_context_get_default
- stream_context_get_options
- stream_context_get_params
- stream_context_set_default
- stream_context_set_option
- stream_context_set_params
- stream_copy_to_stream
- stream_encoding
- stream_filter_append
- stream_filter_prepend
- stream_filter_register
- stream_filter_remove
- stream_get_contents
- stream_get_filters
- stream_get_line
- stream_get_meta_data
- stream_get_transports
- stream_get_wrappers
- stream_is_local
- stream_notification_callback
- stream_register_wrapper
- stream_resolve_include_path
- stream_select
- stream_set_blocking
- stream_set_chunk_size
- stream_set_read_buffer
- stream_set_timeout
- stream_set_write_buffer
- stream_socket_accept
- stream_socket_client
- stream_socket_enable_crypto
- stream_socket_get_name
- stream_socket_pair
- stream_socket_recvfrom
- stream_socket_sendto
- stream_socket_server
- stream_socket_shutdown
- stream_supports_lock
- stream_wrapper_register
- stream_wrapper_restore
- stream_wrapper_unregister
Коментарии
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.
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.
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.