(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_pair — Erzeugt ein Paar nicht zu unterscheidender Sockets und speichert sie in einem Array
socket_create_pair() erzeugt zwei nicht unterscheidbare, verbundene Sockets und speichert sie im Array pair
. Diese Funktion wird allgemein bei der Interprozesskommunikation (IPC) verwendet.
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.
Version | Beschreibung |
---|---|
8.0.0 | pair ist nun ein Verweis auf ein Array von Socket-Instanzen; vorher war es ein Verweis auf ein Array von resources. |
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]);
}
?>