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.
stream_socket_shutdown
(PHP 5 >= 5.2.1)
stream_socket_shutdown — Shutdown a full-duplex connection
Description
bool stream_socket_shutdown
( resource $stream
, int $how
)
Shutdowns (partially or not) a full-duplex connection.
Parameters
- stream
-
An open stream (opened with stream_socket_client(), for example)
- how
-
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).
Return Values
Returns TRUE on success or FALSE on failure.
Examples
Example #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
?>
The above example will output something similar to:
int(5) Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
