socket_create_listen

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

socket_create_listenAbre uma porta do socket para aceitar conexões

Descrição

socket_create_listen ( int $port , int $backlog = ? ) : resource
Aviso

Esta função é EXPERIMENTAL. O comportamento, seu nome e documentação podem mudar sem aviso em futuras versões do PHP. Utilize por sua própria conta e risco.

Essa função significa facilidade na tarefa de criação de um novo socket que esteja na escuta somente para aceitar novas conexões.

socket_create_listen() cria um novo socket resource do tipo AF_INET escutando all interfaces loacis na porta especificada esperando por novas conexões.

O parâmetro backlog define o comprimento máximo da fila de espera de conexões pendentes até onde ela deve crescer. SOMAXCONN deve ser passado como o parâmetro backlog, veja socket_listen() para maiores informações.

socket_create_listen() retorna um novo socket resource em caso de sucesso ou false em caso de erro. O código de erro pode ser retornado com socket_last_error(). Esse código deve ser passado para socket_strerror() para pegar uma explicação textual do erro.

Nota:

Se você quer criar um socket com somente escutas em certas interfaces você deve precisar usar socket_create(), socket_bind() e socket_listen().

Veja também socket_create(), socket_bind(), socket_listen(), socket_last_error() e socket_strerror().

add a note add a note

User Contributed Notes 4 notes

up
8
jdittmer at ppp0 dot net
19 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]
up
-15
aeolianmeson at ifacfchi dot blitzeclipse dot com
15 years ago
I believe that on some systems this may not bind to some or all public interfaces.

On my Windows system, I could not connect on the public interface using this, but could when I made the individual calls to create, bind, and listen.

Dustin Oprea
To Top