(PHP 4 >= 4.0.7, PHP 5)
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 fd . Diese Funktion wird allgemein bei der Inter-Prozess-Kommunikation (IPC) verwendet.
Der Parameter domain bestimmt die Protokollfamilie, die von den Sockets benutzt werden. Eine komplette Liste finden Sie bei der Funktion socket_create().
Der Parameter type bestimmt den Kommuunikationstyp, den die Sockets verwenden sollen. Eine komplette Liste finden Sie bei der Funktion socket_create().
Der Parameter protocol setzt das spezifische Protokoll innerhalb der angegebenen domain , das vom zurückgegebenen Socket für die Kommunikation benutzt wird. 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().
Referenz auf das Array, in das die beiden Socket-Deskriptoren eingefügt werden.
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.
Beispiel #1 socket_create_pair() Beispiel
<?php
$sockets = array();
/* Setup socket pair */
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets) === false) {
echo "socket_create_pair fehlgeschlagen. Grund: ".socket_strerror(socket_last_error());
}
/* Send and Recieve Data */
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);
/* Sockets schliessen */
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) {
/* Elternprozess */
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 {
/*child*/
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]);
}
?>