The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_pair — Ayrılması olanaksız bir soket çifti oluşturur ve bunları bir dizide saklar
socket_create_pair() iki tane bağlı ve ayrılması
olanaksız soket oluşturur ve bunları çift
dizisine
yerleştirir. Bu işlev genellikle süreçler arası iletişim için kullanılır.
aile
Soket tarafından kullanılacak protokol ailesi. Tam liste için socket_create() işlevine bakın.
tür
Soket tarafından kullanılacak iletişimin türü. Tam liste için socket_create() işlevine bakın.
protokol
Soketten dönen iletişimi kullanacak aileye özgü protokol. Bu değer
protol ismi belirtilerek getprotobyname() ile
alınabilir. İstenen protokol bir TCP veya UDP protokolü ise
SOL_TCP
veya SOL_UDP
sabiti
değer olarak kullanılabilir.
Desteklenen protokollerin listesi için socket_create() işlevine bakın.
çift
İki Socket örneğinin yerleştirileceği dizi.
Başarı durumunda true
, başarısızlık durumunda false
döner.
Sürüm: | Açıklama |
---|---|
8.0.0 |
çift dizisine artık
Socket örnekleri yerleştiriliyor; evvelce dizi
elemanları resource türünde olabiliyordu.
|
Örnek 1 - socket_create_pair() örneği
<?php
$sockets = array();
/* Windows'ta AF_INET kullanmak lazım */
$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);
/* Soket çiftini al */
if (socket_create_pair($domain, SOCK_STREAM, 0, $sockets) === false)
{
echo "socket_create_pair başarısız oldu. Sebep: ".
socket_strerror(socket_last_error());
}
/* Veri gönderip al */
if (socket_write($sockets[0], "ABCdnm123\n", strlen("ABCdnm123\n")) === false)
{
echo "socket_write() başarısız oldu. Sebep: ".
socket_strerror(socket_last_error($sockets[0]));
}
if (($data = socket_read($sockets[1], strlen("ABCdef123\n"),
PHP_BINARY_READ)) === false)
{
echo "socket_read() başarısız oldu. Sebep: ".
socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);
/* Soketleri kapat */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>
Örnek 2 -socket_create_pair() IPC örneği
<?php
$ary = array();
$dizgebir = 'Ebeveynin iletisi.';
$dizgeiki = 'Çocuğun iletisi.';
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false)
{
echo "socket_create_pair() başarısız oldu. Sebep: ".
socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if ($pid == -1)
{
echo 'Süreç çatallanamadı.';
}
elseif ($pid)
{
/* ebeveyn */
socket_close($ary[0]);
if (socket_write($ary[1], $dizgebir, strlen($dizgebir)) === false)
{
echo "socket_write() başarısız oldu. Sebep: ".
socket_strerror(socket_last_error($ary[1]));
}
if (socket_read($ary[1], strlen($dizgeiki), PHP_BINARY_READ) == $dizgeiki)
{
echo "$dizgeiki alındı\n";
}
socket_close($ary[1]);
}
else
{
/* çocuk */
socket_close($ary[1]);
if (socket_write($ary[0], $dizgeiki, strlen($dizgeiki)) === false)
{
echo "socket_write() başarısız oldu. Sebep: ".
socket_strerror(socket_last_error($ary[0]));
}
if (socket_read($ary[0], strlen($dizgebir), PHP_BINARY_READ) == $dizgebir)
{
echo "$dizgebir alındı\n";
}
socket_close($ary[0]);
}
?>
The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.
There is a syntax error in one of the code samples provided, it should look like this:
<?php
$sockets = array();
/* Setup socket pair */
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets) === false) {
echo "socket_create_pair failed. Reason: ".socket_strerror(socket_last_error());
}
/* Send and Recieve Data */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
echo "socket_write() failed. Reason: ".socket_strerror(socket_last_error($sockets[0]));
}
if (($data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
echo "socket_read() failed. Reason: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);
/* Close sockets */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>