socket_create_pair

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

socket_create_pairCria um par de soquetes indistinguíveis e os armazena em um array

Descrição

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

socket_create_pair() cria dois soquetes conectados e indistinguíveis e os armazena em pair. Esta função é comumente usada em IPC (Comunicação Entre Processos).

Parâmetros

domain

O parâmetro domain especifica a família de protocolos a ser usada pelo soquete. Consulte socket_create() para a lista completa.

type

O parâmetro type seleciona o tipo de comunicação a ser usado pelo soquete. Consulte socket_create() para a lista completa.

protocol

O parâmetro protocol define o protocolo específico dentro do domínio informado em domain a ser usado durante a comunicação no soquete retornado. O valor adequado pode ser recuperado por nome usando getprotobyname(). Se o protocolo desejado for TCP ou UDP, as constantes correspondentes SOL_TCP e SOL_UDP também podem ser usadas.

Consulte socket_create() para a lista completa de protocolos suportados.

pair

Referência a um array no qual serão inseridas as duas instâncias de Socket.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.0.0 pair é agora uma referência a um array de instâncias Socket; anteriormente, era uma referência a um array de resources.

Exemplos

Example #1 Exemplo de socket_create_pair()

<?php
$sockets = array();

/* No Windows é necessário usar AF_INET */
$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);

/* Configura o par de soquetes */
if (socket_create_pair($domain, SOCK_STREAM, 0, $sockets) === false) {
    echo "socket_create_pair falhou. Motivo: ".socket_strerror(socket_last_error());
}
/* Envia e recebe dados */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
    echo "socket_write() falhou. Motivo: ".socket_strerror(socket_last_error($sockets[0]));
}
if (($data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
    echo "socket_read() falhou. Motivo: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);

/* Fecha os soquetes */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>

Example #2 Exemplo de IPC com socket_create_pair()

<?php
$ary = array();
$strone = 'Mensagem do Pai.';
$strtwo = 'Mensagem do Filho.';

if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
    echo "socket_create_pair() falhou. Motivo: ".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if ($pid == -1) {
    echo 'Não foi possível bifurcar o processo.';
} elseif ($pid) {
    /* pai */
    socket_close($ary[0]);
    if (socket_write($ary[1], $strone, strlen($strone)) === false) {
        echo "socket_write() falhou. Motivo: ".socket_strerror(socket_last_error($ary[1]));
    }
    if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
        echo "Recebida $strtwo\n";
    }
    socket_close($ary[1]);
} else {
    /* filho */
    socket_close($ary[1]);
    if (socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
        echo "socket_write() falhou. Motivo: ".socket_strerror(socket_last_error($ary[0]));
    }
    if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
        echo "Recebida $strone\n";
    }
    socket_close($ary[0]);
}
?>

Veja Também