socket_shutdown

(PHP 4 >= 4.1.0, PHP 5)

socket_shutdownЗавершает работу сокета на получение и/или отправку данных

Описание

bool socket_shutdown ( resource $socket [, int $how = 2 ] )

Функция socket_shutdown() позволяет вам остановить передачу поступающих, исходящих или всех данных (по умолчанию) через сокет socket

Список параметров

socket

Действующий ресурс сокета, созданный при помощи функции socket_create().

how

Значение параметра how может быть одним из следующих:

возможные значения для параметра how
0 Завершает чтение из сокета
1 Завершает запись в сокет
2 Завершает чтение и запись в сокет

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Коментарии

Sockets should be first shutdown and then closed.
<?php
// Sample: Closing sockets gracefully
socket_shutdown($sock2);
socket_close($sock);
?>
2005-09-02 16:13:29
http://php5.kiev.ua/manual/ru/function.socket-shutdown.html
That is not a good example of a graceful shutdown. One should close the sending side of the socket and continue to read until the remote end closes its sending connection.
2005-11-23 12:20:35
http://php5.kiev.ua/manual/ru/function.socket-shutdown.html
Shutdown and SOL_TCP:
<?php
$a
socket_create(AF_INETSOCK_STREAMSOL_TCP);
socket_shutdown($a2)
?>
PHP Warning:  socket_shutdown(): unable to shutdown socket [107]: Transport endpoint is not connected 

Shutdown and SOL_UDP:
<?php
$a
socket_create(AF_INETSOCK_STREAMSOL_UDP);
socket_shutdown($a2)
?>
PHP Warning:  socket_shutdown(): unable to shutdown socket [107]: Transport endpoint is not connected 

Conclusion: if you are not actually connected, shutdown will fails with socket_error = 107, Transport endpoint is not connected. This is true for both TPC and UDP connection (which is suprising, UDP being a connectionless protocol). This is true no matter the value set for the how parameter.
2010-09-16 12:09:06
http://php5.kiev.ua/manual/ru/function.socket-shutdown.html
<explain>
In this case, the TCP client is gracefully disconnected from the server

<?php

define
('BUF_SIZE',10);

// create for tcp
$sock socket_create(AF_INETSOCK_STREAMgetprotobyname('tcp'));
socket_bind($sock'127.0.0.1',5200);
socket_listen($sock,1024);
$fp fopen('./socket_shutdown.php','rb');
$clnt_sock socket_accept($sock);

while(!
feof($fp)) {
   
$str fread($fp,BUF_SIZE);
   
socket_write($clnt_sock,$str,BUF_SIZE);


$eof "\n";
socket_write($clnt_sock,$eof,strlen($eof));

//disconnect output stream(断开输入流)
socket_shutdown($clnt_sock,1);
$ret socket_read($clnt_sock100);
printf("Message from client:%s\n",$ret);
socket_close($clnt_sock);
socket_close($sock);
?>

<?php
// for tcp-client 
$clnt_sock socket_create(AF_INETSOCK_STREAMgetprotobyname('tcp'));
socket_connect($clnt_sock'127.0.0.1'5200);
while ((
$cnt= @socket_read($clnt_sock10,PHP_NORMAL_READ)) !==false) {
   
file_put_contents('./receive.data',$cnt,FILE_APPEND);
}
print 
"receive file data".PHP_EOL;
socket_write($clnt_sock"Tank you");
socket_close($clnt_sock);
?>
2019-04-07 12:24:35
http://php5.kiev.ua/manual/ru/function.socket-shutdown.html
Автор:
Shutting down is a formality two peers can do before closing their connections. It's not required, but it can help assert your I/O procedures, so it's useful.

If writing is shut down, trying to send will result in a pipe error, and the remote peer will read an empty string after receiving all other pending data.

If reading is shut down, trying to receive will return an empty string, and the remote peer will get a pipe error if they try to send.

Writing should be shut down first between two peers. Remaining data should then be read and handled. If anything is sent at this point it should be a "goodbye" (nothing that requires the remote peer to write back to you). Finally, reading can be shut down.

Selection on a shut down channel will always succeed. Similarly, the remote peer will always succeed at selecting the opposite channel.
2022-12-04 09:29:20
http://php5.kiev.ua/manual/ru/function.socket-shutdown.html

    Поддержать сайт на родительском проекте КГБ