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 — Çift yönlü bağlantıyı kapatır
Açıklama
bool stream_socket_shutdown
( resource
$akım
, int $nasıl
)Bir çift yönlü bağlantıyı tamamen veya kısmen kapatır.
Değiştirgeler
-
akım -
stream_socket_client() gibi bir işlevle açılmış bir akım.
-
nasıl -
Şu sabitlerden biri olabilir:
STREAM_SHUT_RD(okumayı kapatır),STREAM_SHUT_WR(yazmayı kapatır) veyaSTREAM_SHUT_RDWR(hem okumayı hem de yazmayı kapatır).
Dönen Değerler
Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.
Örnekler
Örnek 1 - stream_socket_shutdown() örneği
<?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")); // çalışmaz
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
int(5) Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
