array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'function.stream-socket-server.php', 1 => 'stream_socket_server', ), 'up' => array ( 0 => 'ref.stream.php', 1 => 'Funções de Fluxo', ), 'prev' => array ( 0 => 'function.stream-socket-sendto.php', 1 => 'stream_socket_sendto', ), 'next' => array ( 0 => 'function.stream-socket-shutdown.php', 1 => 'stream_socket_shutdown', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'reference/stream/functions/stream-socket-server.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8)
stream_socket_server — Cria socket de servidor de domínio Internet ou Unix
$address
,&$error_code
= null
,&$error_message
= null
,$flags
= STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,$context
= null
Cria um socket de fluxo ou datagrama no endereço especificado em
address
.
Este função apenas cria um socket, para começar a aceitar conexões use stream_socket_accept().
address
O tipo de socket criado é determinado pelo transporte especificado
utilizando-se o formato padrão de URL: transporte://alvo
.
Para sockets do domínio da Internet (AF_INET
) como TCP e UDP, a
porção alvo
do parâmetro
remote_socket
deve sonsistir de um
nome de servidor ou endereço IP seguido de dois-pontos e um número de porta. Para
sockets do domínio Unix, a porção alvo
deve
apontar para o arquivo de socket do sistema de arquivos.
Dependendo do ambiente, sockets do domínio Unix podem não estar disponíveis. Uma lista de transportes disponíveis pode ser obtida usando a função stream_get_transports(). Consulte Lista de Transportes via Socket Suportados para uma lista de transportes existentes.
error_code
Se or argumentos opcionais error_code
e error_message
estiverem presentes, eles serão definidos para indicar o erro real que ocorreu
ocorreu nas chamadas de sistema socket()
,
bind()
e listen()
. Se
o valor retornado em error_code
for
0
e a função retornou false
, é um
indicativo que o erro ocorreu antes da chamada a bind()
.
Isto mais provavelmente será devido a um problema na inicialização do socket.
Note que os argumentos error_code
e
error_message
serão sempre passados por referência.
error_message
Consulte a descrição para error_code
.
flags
Um campo de máscara de bits que pode ser definido para qualquer combinação de opções de criação de sockets.
Nota:
Para sockets UDP, deve ser usado
STREAM_SERVER_BIND
como o parâmetroflags
.
context
Retorna o fluxo criado, ou false
em caso de erro.
Versão | Descrição |
---|---|
8.0.0 |
context agora pode ser nulo.
|
Exemplo #1 Usando sockets de servidor TCP
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'O horário atual é ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
O exemplo abaixo mostra como agir como um servidor de data/hora que pode responder a requisições de horário como mostrado em um exemplo de stream_socket_client().
Nota: A maioria dos sistemas requerem acesso de administrador para criar um socket de servidor em portas abaixo de 1024.
Exemplo #2 Usando sockets de servidor usando UDP
<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);
?>
Nota: Ao especificar um endereço IPv6 numérico (por exemplo,
fe80::1
), o IP deve ser colocado entre colchetes — por exemplo,tcp://[fe80::1]:80
.