socket_create_pair
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_pair — Cria um par de soquetes indistinguíveis e os armazena em um array
Descrição
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 emdomain
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 correspondentesSOL_TCP
eSOL_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.
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
- socket_create() - Cria um soquete (ponto de extremidade para comunição)
- socket_create_listen() - Abre um soquete em uma porta para aceitar conexões
- socket_bind() - Vincula um nome a um soquete
- socket_listen() - Escuta uma conexão em um soquete
- socket_last_error() - Retorna o último erro no soquete
- socket_strerror() - Retorna uma string descrevendo um erro no soquete