socket_create_pair

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

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 &$fd ) : bool

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.

Parameter-Liste

domain

Der Parameter domain bestimmt die Protokollfamilie, die von den Sockets benutzt werden. 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 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().

fd

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

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Changelog

Version Beschreibung
5.3.0 Diese Funktion wurde für Windows-Plattformen wieder reaktiviert.
4.3.0 Diese Funktion wurde aufgrund eines Fehlers für Windows deaktiviert.

Beispiele

Beispiel #1 socket_create_pair()-Beispiel

<?php
$sockets 
= array();

/* Unter Windows muss man AF_INET benutzen */
$domain = (strtoupper(substr(PHP_OS03)) == 'WIN' AF_INET AF_UNIX);

/* Socket-Paar erzeugen */
if (socket_create_pair(AF_UNIXSOCK_STREAM0$sockets) === false) {
    echo 
"socket_create_pair fehlgeschlagen. Grund: ".socket_strerror(socket_last_error());
}
/* Daten senden und empfangen */
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 schließen */
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_UNIXSOCK_STREAM0$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], $stronestrlen($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 {
    
/* Kindprozess */
    
socket_close($ary[1]);
    if (
socket_write($ary[0], $strtwostrlen($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