(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recvfrom — Recebe dados de um soquete, seja ele orientado a conexão ou não
$socket,&$data,$length,$flags,&$address,&$port = null
A função socket_recvfrom() recebe o número de bytes definido em
length na variável definida em data do
endereço informado em address na porta port (se o
soquete não for do tipo AF_UNIX) usando
o soquete passado em socket. A função socket_recvfrom() pode ser
usada para coletar dados de soquetes conectados e não conectados.
Além disso, uma ou mais opções podem ser especificadas para modificar o comportamento
da função.
Os parâmetros address e port precisam ser
passados por referência. Se o soquete não for orientado a conexão,
address será definido como o endereço do protocolo de Internet
do servidor remoto ou o caminho para o soquete UNIX. Se o soquete for
orientado a conexão, address será null. Além disso,
a variável definida em port conterá a porta do servidor remoto no
caso de um soquete AF_INET ou
AF_INET6 não conectado.
Nota: Esta função é compatível com dados binários.
socket
O parâmetro socket precisa ser uma instância de Socket criada
previamente por socket_create().
data
Os dados recebidos serão buscados na variável especificada por
data.
length
O parâmetro length define o número máximo de bytes que serão buscados do servidor remoto.
flags
O vaor de flags pode ser qualquer combinação das
opções a seguir, combinadas com o operador OR binário
(|).
| Opção | Descrição |
|---|---|
MSG_OOB |
Processa dados fora-de-banda. |
MSG_PEEK |
Recebe dados do início da fila de recebimento sem removê-los da fila. |
MSG_WAITALL |
Bloqueis até que o número de bytes definidos em length tenham sido recebidos.
Entretando, se um sinal for capturado ou se o servidor remoto desconectar, a
função poderá retornar menos dados.
|
MSG_DONTWAIT |
Com esta opção definida, a função retorna mesmo se ela normalmente fosse bloquer. |
address
Se o soquete for do tipo AF_UNIX,
address será o caminho para o arquivo. Caso contrário, para
soquetes não conectados, address será o endereço IP do
servidor remoto ou null se o soquete for orientado à conexão.
port
Este argumento se aplica apenas aos soquetes AF_INET e
AF_INET6 e especifica a porta remota
da qual os dados serão recebidos. Se o soquete for orientado à conexão,
port será null.
socket_recvfrom() retorna o número de bytes recebidos,
ou false se houver um erro. O código de erro real pode ser recuperado
chamando socket_last_error(). Este código de erro pode ser
passado para socket_strerror() para obter uma explicação
textual do erro.
| Versão | Descrição |
|---|---|
| 8.0.0 |
O parâmetro socket agora espera uma instância de Socket;
anteriormente, um resource era esperado.
|
Exemplo #1 Exemplo de socket_recvfrom()
<?php
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, '127.0.0.1', 1223);
$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 12, 0, $from, $port);
echo "Recebido $buf do endereço remoto $from e porta remota $port" . PHP_EOL;
?>Este exemplo iniciará um soquete UDP na porta 1223 de 127.0.0.1 e mostrará no máximo 12 caracteres recebidos de um servidor remoto.