PHP 8.4.1 Released!

socket_recvfrom

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

socket_recvfromRecebe dados de um soquete, seja ele orientado a conexão ou não

Descrição

socket_recvfrom(
    Socket $socket,
    string &$data,
    int $length,
    int $flags,
    string &$address,
    int &$port = null
): int|false

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.

Parâmetros

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 (|).

Valores possíveis para flags
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.

Valor Retornado

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.

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

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.

Veja Também

adicione uma nota

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

up
3
lorin dot weilenmann at gmail dot com
9 years ago
If you use socket_recvfrom on a UDP socket and combine it with the MSG_DONTWAIT flag, it will raise a PHP Warning if there is nothing to read. AFAIK, there is no way around that warning except suppressing it with @ (i.e. you cannot check if there is data before calling socket_recvfrom).
up
2
ply2attoetensen-project.com
7 years ago
MSG_DONTWAIT doesn't seem to exist in windows sockets. However socket_set_nonblock() seems to do the trick.
up
1
davide dot renzi at gmail dot com
12 years ago
Pay attention! On some PHP version the MSG_DONTWAIT flag is not defined (see https://bugs.php.net/bug.php?id=48326)
up
-3
jaggerwang at gmail dot com
17 years ago
I'm confused about the rerturn value of socket_recvfrom(), it said -1 when failed, but when I call like this:

if (($len = @socket_recvfrom($sock, $result, 32, 0, $ip, $port)) == -1) {
if ($this->_debug) {
echo "socket_read() failed: " . socket_strerror(socket_last_error()) . "\n";
}
return false;
}

variable $len = false, when I change the buffer length from 32 to 4096, it becomes right.
To Top