PHP Conference Nagoya 2025

socket_create_listen

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

socket_create_listenAbre um soquete em uma porta para aceitar conexões

Descrição

socket_create_listen(int $port, int $backlog = SOMAXCONN): Socket|false

socket_create_listen() cria uma nova instância de Socket do tipo AF_INET escutando em todas as interfaces locais na porta informada aguardando por novas conexões.

O objetivo desta função é facilitar a tarefa de criação de um novo soquete que apenas escuta para aceitar novas conexões.

Parâmetros

port

A porta na qual deve-se escutar em todas as interfaces.

backlog

O parâmetro backlog define o comprimento máximo até o qual a fila de conexões pendentes pode crescer. SOMAXCONN pode ser passado como parâmetro backlog, consulte socket_listen() para mais informação.

Valor Retornado

socket_create_listen() retorna uma nova instância de Socket em caso de sucesso ou false em caso de erro. O código de erro pode ser recuperado com socket_last_error(). Este código pode ser passado a socket_strerror() para obter uma explicação textual do erro.

Registro de Alterações

Versão Descrição
8.4.0 O valor padrão de backlog agora é SOMAXCONN. Anteriormente era 128.
8.0.0 Em caso de sucesso, esta função agora retorna uma instância de Socket; anteriormente, retornava um resource.

Notas

Nota:

Se a intenção for criar um soquete que somente escuta em uma certa interface, é necessário usar socket_create(), socket_bind() e socket_listen().

Veja Também

adicione uma nota

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

up
10
jdittmer at ppp0 dot net
20 years ago
If you specify no port number, or 0, a random free port will be chosen.
To use ports for ipc between client/server on the same machine you can use (minus error checking)

server.php:
<?php
$sock
= socket_create_listen(0);
socket_getsockname($sock, $addr, $port);
print
"Server Listening on $addr:$port\n";
$fp = fopen($port_file, 'w');
fwrite($fp, $port);
fclose($fp);
while(
$c = socket_accept($sock)) {
/* do something useful */
socket_getpeername($c, $raddr, $rport);
print
"Received Connection from $raddr:$rport\n";
}
socket_close($sock);
?>

client.php:
<?php
$fp
= fopen($port_file, 'r');
$port = fgets($fp, 1024);
fclose($fp);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, '127.0.0.1', $port);
socket_close($sock);
?>
up
4
sysspoof at ng-lab dot org
16 years ago
Please note that port 1 to and with 1024 on linux and bsd system require root privileges. So it is recommended to choose a higher port for your own application.
up
2
basim at baassiri dot com
20 years ago
Remember that ports are only valid from 1 - 65535

[editor's note: typo fixed, thanks abryant at apple dot com]
To Top