CakeFest 2024: The Official CakePHP Conference

socket_create_pair

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_create_pairAyrılması olanaksız bir soket çifti oluşturur ve bunları bir dizide saklar

Açıklama

socket_create_pair(
    int $aile,
    int $tür,
    int $protokol,
    array &$çift
): bool

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.

Bağımsız Değişkenler

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.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 çift dizisine artık Socket örnekleri yerleştiriliyor; evvelce dizi elemanları resource türünde olabiliyordu.

Örnekler

Ö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]);
}
?>

Ayrıca Bakınız

add a note

User Contributed Notes 2 notes

up
3
cweiske at php dot net
14 years ago
The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.
up
-7
thegreatall at gmail dot com
16 years ago
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]);
?>
To Top