socket_get_option

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

socket_get_optionObtém opções para o soquete

Descrição

socket_get_option(Socket $socket, int $level, int $option): array|int|false

A função socket_get_option() recupera o valor para a opção especificado pelo parâmetro option para o soquete informado no parâmetro socket.

Parâmetros

socket

Uma instância de Socket criada com socket_create() ou socket_accept().

level

O parâmetro level especifica o nível de protocolo no qual a opção reside. Por exemplo, para recuperar opções no nível do soquete, um parâmetro level com valor SOL_SOCKET seria usado. Outros níveis, como TCP, podem ser usados especificando o número do protocolo para aquele nível. Números de protocolo podem ser encontrados usando a função getprotobyname().

option
Opções de Soquete Disponíveis
Opção Descrição Tipo
SO_DEBUG Reporta se a informação de depuração está sendo gravada. int
SO_BROADCAST Reporta se a transmissão de mensagens de difusão é suportada. int
SO_REUSEADDR Reporta se os endereços locais podem ser reutilizados. int
SO_REUSEPORT Reporta se as portas locais podem ser reutilizadas. int
SO_KEEPALIVE Reporta se as conexões são mantidas ativas com transmissão periódicas de mensagens. Se o soquete conectado falhar em responder a essas mensagens, a conexão é quebrada e os processos escrevendo nesse soquete são notificados com um sinal SIGPIPE. int
SO_LINGER

Informa se o soquete especificado em socket permanece em socket_close() se houver dados presentes. Por padrão, quando o soquete é fechado, ele tenta enviar todos os dados não enviados. No caso de um soquete orientado a conexão, socket_close() aguardará que seu par reconheça os dados.

Se l_onoff for diferente de zero e l_linger for zero, todos os dados não enviados serão descartados e o RST (redefinição) será enviado ao par no caso de um soquete orientado a conexão.

Por outro lado, se l_onoff for diferente de zero e l_linger for diferente de zero, socket_close() irá bloquear até que todos os dados sejam enviados ou que tenha passado o tempo especificado em l_linger. Se o soquete for não bloqueante, socket_close() falhará e retornará um erro.

array. O array conterá duas chaves: l_onoff e l_linger.
SO_OOBINLINE Reporta se o socket mantém os dados fora-de-banda em linha. int
SO_SNDBUF Reporta o tamanho do buffer de envio. int
SO_RCVBUF Reporta o tamanho do buffer de recebimento. int
SO_ERROR Relata informações sobre o status do erro e o limpa. int (não pode ser definido por socket_set_option())
SO_TYPE Reporta o tipo do socket (ex.: SOCK_STREAM). int (não pode ser definido por socket_set_option())
SO_DONTROUTE Informa se as mensagens de saída ignoram os recursos de roteamento padrão. int
SO_RCVLOWAT Informa o número mínimo de bytes a serem processados ​​para operações de entrada de socket. int
SO_RCVTIMEO Informa o valor do tempo limite para operações de entrada. array. O array conterá duas chaves: sec que é a parte dos segundos no valor do tempo limite e usec que é a parte dos microssegundos do valor do tempo limite.
SO_SNDTIMEO Informa o valor do tempo limite especificando a quantidade de tempo que uma função de saída bloqueia porque o controle de fluxo impede o envio de dados. array. O array conterá duas chaves: sec que é a parte dos segundos no valor do tempo limite e usec que é a parte dos microssegundos do valor do tempo limite.
SO_SNDLOWAT Informa o número mínimo de bytes a serem processados ​​para operações de saída do socket. int
TCP_NODELAY Informa se o algoritmo Nagle TCP está desabilitado. int
MCAST_JOIN_GROUP Ingressa em um grupo "multicast". array com chaves "group", especificando uma string com um endereço "multicast" IPv4 ou IPv6 e "interface", especificando um número de interface (tipo int) ou uma string com o nome da interface, como "eth0". 0 pode ser especificado para indicar que a interface deve ser selecionada usando regras de roteamento. (só pode ser usada em socket_set_option())
MCAST_LEAVE_GROUP Sai de um grupo "multicast". array. Veja MCAST_JOIN_GROUP para mais informação. (só pode ser usada em socket_set_option())
MCAST_BLOCK_SOURCE Bloqueia pacotes que chegam de uma origem específica para um grupo "multicast" específico, no qual deve-se ter ingressado previamente. array com as mesmas chaves de MCAST_JOIN_GROUP, mais uma chave extra, source, que mapeia a uma string especificando um endereço IPv4 ou IPv6 da origem a ser bloqueada. (só pode ser usada em socket_set_option())
MCAST_UNBLOCK_SOURCE Desbloqueia (volta a receber) pacotes que chegam de um endereço de origem específico para um grupo "multicast" específico, no qual deve-se ter ingressado previamente. array com o mesmo formato de MCAST_BLOCK_SOURCE. (só pode ser usada em socket_set_option())
MCAST_JOIN_SOURCE_GROUP Recebe pacotes destinados a um grupo "multicast" específico cujo endereço de origem corresponde a um valor específico. array com o mesmo formato de MCAST_BLOCK_SOURCE. (só pode ser usada em socket_set_option())
MCAST_LEAVE_SOURCE_GROUP Para de receber pacotes destinados a um grupo "multicast" específico cujo endereço de origem corresponde a um valor específico. array com o mesmo formato de MCAST_BLOCK_SOURCE. (só pode ser usada em socket_set_option())
IP_MULTICAST_IF A interface de saída para pacotes "multicast" IPv4. Pode ser um int especificando o número da interface ou uma string com um nome de interface, como eth0. O valor 0 pode ser usado para indicar a tabela de roteamento a ser usada na seleção da interface. A função socket_get_option() retorna um índice de interface. Observe que, diferentemente da API C, esta opção NÃO utiliza um endereço IP. Isto elimina a diferença de interface entre IP_MULTICAST_IF e IPV6_MULTICAST_IF.
IPV6_MULTICAST_IF A interface de saída para pacotes "multicast" IPv6. O mesmo que IP_MULTICAST_IF.
IP_MULTICAST_LOOP A política de "loopback multicast" para pacotes IPv4 habilita ou desabilita o "loopback" de "multicasts" de saída, que devem ter sido previamente ingressados. O efeito difere, entretanto, se for aplicado em unixes ou Windows, o primeiro está no caminho de recepção enquanto o último está no caminho de envio. int (pode ser 0 ou 1). Para socket_set_option(), qualquer valor será aceito e será convertido para um booleano seguindo as regras normais do PHP.
IPV6_MULTICAST_LOOP Análoga a IP_MULTICAST_LOOP, porém para IPv6. int. Veja IP_MULTICAST_LOOP.
IP_MULTICAST_TTL O tempo de vida dos pacotes de saída IPv4 "multicast". Deve ser um valor entre 0 (não sair da interface) e 255. O padrão é 1 (apenas a rede local é alcançada). int entre 0 e 255.
IPV6_MULTICAST_HOPS Análoga a IP_MULTICAST_TTL, porém para pacotes IPv6. O valor -1 também é aceito e significa que a rota padrão deve ser usada. int entre -1 e 255.
SO_MARK Define um identificador no soquete com o objetivo de filtrar pacotes no Linux. int
SO_ACCEPTFILTER Adicionar um filtro de aceitação no soquete sendo escutado (FreeBSD/NetBSD). Um módulo de kernel de filtro de aceitação precisa ser carregado antecipadamente no FreeBSD (ex.: accf_http). string. Nome do filtro (comprimento máximo de 15).
SO_USER_COOKIE Define um identificador no soquete com o objetivo de filtrar pacotes no FreeBSD. int
SO_RTABLE Define um identificador no soquete com o objetivo de filtrar pacotes no OpenBSD. int
SO_DONTTRUNC Retém dados não lidos. int
SO_WANTMORE Fornece uma dica de quando mais dados estão prontos. int
TCP_DEFER_ACCEPT Não notifica um soquete que estiver escutando até que os dados estejam prontos. int
SO_INCOMING_CPU Obtém/define a afinidade de CPU de um soquete. int
SO_MEMINFO Obtém todas as informações de memória de um soquete. int
SO_BPF_EXTENSIONS Obtém as extensões BPF suportadas pelo kernel para anexar a um soquete. int
SO_SETFIB Define a tabela de rotas (FIB) de um soquete. (Somente FreeBSD) int
SOL_FILTER Filtros atribuídos a um soquete. (Somente Solaris/Illumos) int
TCP_KEEPCNT Define o número máximo de sondas de manutenção de atividade que o TCP deve enviar antes de interromper a conexão. int
TCP_KEEPIDLE Define o tempo que a conexão precisa permanecer ociosa. int
TCP_KEEPINTVL Define o tempo entre sondagens de manutenção de atividade individuais. int
TCP_KEEPALIVE Define o tempo que a conexão precisa permanecer ociosa. (somente macOS) int
TCP_NOTSENT_LOWAT Define o número limite de dados não enviados na fila de escrita pelo fluxo de soquete. (somente Linux) int

Valor Retornado

Retorna o valor da opção informada, ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.0.0 O parâmetro socket agora espera uma instância de Socket; anteriormente, um resource era esperado.

Exemplos

Example #1 Exemplo de socket_get_option()

<?php
$socket = socket_create_listen(1223);

$linger = array('l_linger' => 1, 'l_onoff' => 1);
socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);

var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR));
?>

Veja Também