PHP Conference Nagoya 2025

Opções de contexto de Socket

Opções de contexto de SocketLista de opções de contexto de Socket

Descrição

As opções de contextos para Socket estão disponível em todos os empacotadores que trabalham em sockets, como tcp, http e ftp.

Opções

bindto

Utilizado para especificar o endereço IP (tanto IPv4 quanto IPv6) e/ou o número da porta que o PHP usará para acessar a rede. A sintaxe é ip:port para endereços IPv4, e [ip]:port para endereços IPv6. Definir o IP ou a porta com 0 fará com que o sistema escolha o IP e/ou a porta.

Nota:

Como o FTP cria duas conexões socket durante sua operação normal, o número da porta não poderá ser especificado ao se usar esta opção.

backlog

Utilizado para limitar o número de conexões excedentes na fila de escuta do socket.

Nota:

Este parâmetro só é aplicável na função stream_socket_server().

ipv6_v6only

Sobrescreve a diretiva do sistema operacional no que se refere ao mapeamento IPv4 em IPv6.

Nota:

Isto é importante quando tentando ouvir em um endereço IPv4 separadamente da existência de um binding em [::].

Somente aplicável em stream_socket_server().

so_reuseport

Permite várias ligações no mesmo IP:porta, mesmo de processos separados.

Nota:

Somente aplicável em stream_socket_server().

so_broadcast

Permite enviar e receber dados de/para endereços de transmissão ampla.

Nota:

Somente aplicável a stream_socket_server().

tcp_nodelay

Ao ativar essa opção com true será configurado SOL_TCP,NO_DELAY=1, de forma a desabilitar o algoritmo Nagle TCP.

Registro de Alterações

Versão Descrição
7.1.0 Adicionado o parâmetro tcp_nodelay.
7.0.1 Adicionado o parâmetro ipv6_v6only.

Exemplos

Exemplo #1 Exemplo básico de uso do parâmetro bindto

<?php
// conecta à internet usando o IP '192.168.0.100'
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);


// conecta à internet usando o IP '192.168.0.100' e a porta '7000'
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:7000',
),
);


// conecta à internet usando o endereço IPv6 '2001:db8::1'
// e a porta '7000'
$opts = array(
'socket' => array(
'bindto' => '[2001:db8::1]:7000',
),
);


// conecta à internet usando a porta '7000'
$opts = array(
'socket' => array(
'bindto' => '0:7000',
),
);


// cria o contexto...
$context = stream_context_create($opts);

// ...que será utilizado para buscar os dados
echo file_get_contents('http://www.example.com', false, $context);

?>

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
9
mix at ater dot me
5 years ago
The right way for forcing IPv6 is 'bindto' => '[::]:0'
up
2
guru at jnt-finland dot fi
9 years ago
You can set "bindto" to "0:0" to force use IPv4 instead of IPv6. And probably "[0]:0" to force use IPv6, thou this I couldn't test.
To Top