socket_create_pair

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

socket_create_pairErzeugt ein Paar nicht zu unterscheidender Sockets und speichert sie in einem Array

Beschreibung

socket_create_pair(
    int$domain,
    int$type,
    int$protocol,
    array&$pair
): bool

socket_create_pair() erzeugt zwei nicht unterscheidbare, verbundene Sockets und speichert sie im Array pair. Diese Funktion wird allgemein bei der Interprozesskommunikation (IPC) verwendet.

Parameter-Liste

domain

Der Parameter domain bestimmt die Protokollfamilie, die von den Sockets benutzt wird. Eine komplette Liste finden Sie bei der Funktion socket_create().

type

Der Parameter type bestimmt den Kommunikationstyp, den die Sockets verwenden sollen. Eine komplette Liste finden Sie bei der Funktion socket_create().

protocol

Der Parameter protocol legt das spezifische Protokoll fest, das vom zurückgegebenen Socket für die Kommunikation innerhalb der angegebenen domain benutzt werden soll. Der passende Wert kann ermittelt werden, indem der Name an die Funktion getprotobyname() übergeben wird. Wenn TCP oder UDP gewünscht werden, können auch die entsprechenden Konstanten SOL_TCP oder SOL_UDP benutzt werden.

Eine vollständige Liste aller unterstützter Protokolle finden Sie bei der Funktion socket_create().

pair

Referenz auf das Array, in das die beiden Socket-Instanzen eingefügt werden.

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Changelog

VersionBeschreibung
8.0.0pair ist nun ein Verweis auf ein Array von Socket-Instanzen; vorher war es ein Verweis auf ein Array von resources.

Beispiele

Beispiel #1 socket_create_pair()-Beispiel

<?php
$sockets
= array();


$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);


if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets) === false) {
echo
"socket_create_pair fehlgeschlagen. Grund: ".socket_strerror(socket_last_error());
}

if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
echo
"socket_write() fehlgeschlagen. Grund: ".socket_strerror(socket_last_error($sockets[0]));
}
if ((
$data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
echo
"socket_read() fehlgeschlagen. Grund: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);


socket_close($sockets[0]);
socket_close($sockets[1]);
?>

Beispiel #2 socket_create_pair()-IPC-Beispiel

<?php
$ary
= array();
$strone = 'Nachricht vom Elternprozess.';
$strtwo = 'Nachricht vom Kindprozess.';

if (
socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
echo
"socket_create_pair() fehlgeschlagen. Grund: ".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if (
$pid == -1) {
echo
'Konnte keinen Kindprozess erzeugen.';
} elseif (
$pid) {

socket_close($ary[0]);
if (
socket_write($ary[1], $strone, strlen($strone)) === false) {
echo
"socket_write() fehlgeschlagen. Grund: ".socket_strerror(socket_last_error($ary[1]));
}
if (
socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
echo
"Empfangen: $strtwo\n";
}
socket_close($ary[1]);
} else {

socket_close($ary[1]);
if (
socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
echo
"socket_write() fehlgeschlagen. Grund: ".socket_strerror(socket_last_error($ary[0]));
}
if (
socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
echo
"Empfangen: $strone\n";
}
socket_close($ary[0]);
}
?>

Siehe auch

To Top