socket_create_pair
(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
Beschreibung
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 angegebenendomain
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 KonstantenSOL_TCP
oderSOL_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
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.
|
Beispiele
Beispiel #1 socket_create_pair()-Beispiel
<?php
$sockets = array();
/* Unter Windows muss man AF_INET benutzen */
$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);
/* Socket-Paar erzeugen */
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $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_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 {
/* Kindprozess */
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
- socket_create() - Erzeugt einen Socket (Endpunkt für die Kommunikation)
- socket_create_listen() - Öffnet einen Socket, um Verbindungen über einem gegebenen Port aufzubauen
- socket_bind() - Verknüpft einen Socket mit einem Namen
- socket_listen() - Hört einen Socket nach Verbindungsanforderungen ab
- socket_last_error() - Gibt den letzten Fehler zurück, der an einem Socket aufgetreten ist
- socket_strerror() - Gibt einen String zurück, der einen Socket-Fehler beschreibt