(PHP 5, PHP 7)
stream_socket_server — Bir Genel Ağ veya Unix alan sunucusu soketi oluşturur
$yerel_soket
[, int &$hatanum
[, string &$ileti
[, int $seçenekler
= STREAM_SERVER_BIND | STREAM_SERVER_LISTEN
[, resource $bağlam
]]]] ) : resource
Belirtilen yerel_soket
üzerinde bir akım veya
verikatarı soketi oluşturur.
Bu işlev, stream_socket_accept() kullanarak veri kabul etmek üzere bir soket oluşturmaktan başka bir şey yapmaz.
yerel_soket
Oluşturulacak soketin türü standart URL biçemi kullanılarak belirtilir: şema://hedef.
TCP ve UDP gibi Genel Ağ Alanı soketleri (AF_INET
)
için, uzak_soket
'in hedef
parçası bir konak ismi veya IP adresinden sonra gelen bir ikinokta imi
ve bir port numarasından oluşur. Unix alan soketleri için
hedef parçası ise dosya sistemi üstündeki bir soket
dosyasını göstermelidir.
Platforma bağlı olarak, Unix alan soketleri mevcut olmayabilir. Kullanılabilecek aktarım çeşitlerinin listesi stream_get_transports() işlevi ile alınabilir. Yerleşik aktarım türlerinin tam listesini Desteklenen Soket Aktarımlarının Listesi sayfasında bulabilirsiniz.
hatanum
Seçimlik hatanum
ve ileti
değiştirgeleri belirtilmişse, bunlara socket(),
bind() ve listen() sistem
çağrılarında oluşan sistem seviyesindeki hatanın bilgisi atanır. Eğer
hatanum
değiştirgesinde 0
döndüğünde işlev FALSE
döndürmüşse hata, bind()
çağrısından önce oluşmuş demektir. Bu sorunla çoğunlukla soketin
ilklendirilmesi sırasında karşılaşılır. hatanum
ve ileti
değiştirgelerinin daima gönderimli
aktarıldıklarına dikkat ediniz.
ileti
hatanum
değiştirgesinin açıklamasına bakınız.
seçenekler
Soket oluşturma seçeneklerinden oluşan bir bit maskesi. Öntanımlı
değer: STREAM_SERVER_BIND
| STREAM_SERVER_LISTEN
.
Bilginize:
UDP soketleri için, bu değiştirgeyle
STREAM_SERVER_BIND
değerini aktarmalısınız.
bağlam
stream_context_create() ile oluşturulmuş geçerli bir bağlam özkaynağı.
Bir hata durumunda FALSE
, aksi takdirde oluşturulan soketi döndürür.
Örnek 1 - TCP sunucu soketlerinin kullanımı
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'Yerel zaman: ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
Aşağıdaki örnekte, stream_socket_client() işleviyle ilgili örneklerden birinde yapılan bir zaman sorgusuna bir zaman sunucusunun yanıt vermesi için neler yapıldığı gösterilmiştir.
Bilginize: Çoğu sistem, 1024'ten küçük portları oluşturmak için root yetkisine ihtiyaç duyar.
Örnek 2 - UDP sunucu soketlerinin kullanımı
<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);
?>
Bilginize: Bir sayısal IPv6 adresi (fe80::1 gibi) belirtirken port numarasıda belirtmek isterseniz IP adresini köşeli ayraçlar arasına almalısınız. Örnek: tcp://[fe80::1]:80.