stream_socket_server
(PHP 5, PHP 7, PHP 8)
stream_socket_server — Cria socket de servidor de domínio Internet ou Unix
Descrição
string
$address
,int
&$error_code
= null
,string
&$error_message
= null
,int
$flags
= STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,?resource
$context
= null
): resource|false
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().
Parâmetros
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çãoalvo
do parâmetroremote_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çãoalvo
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
eerror_message
estiverem presentes, eles serão definidos para indicar o erro real que ocorreu ocorreu nas chamadas de sistemasocket()
,bind()
elisten()
. Se o valor retornado emerror_code
for0
e a função retornoufalse
, é um indicativo que o erro ocorreu antes da chamada abind()
. Isto mais provavelmente será devido a um problema na inicialização do socket. Note que os argumentoserror_code
eerror_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.
Note:
Para sockets UDP, deve ser usado
STREAM_SERVER_BIND
como o parâmetroflags
. context
-
Valor Retornado
Retorna o fluxo criado, ou false
em caso de erro.
Registro de Alterações
Versão | Descrição |
---|---|
8.0.0 |
context agora pode ser nulo.
|
Exemplos
Example #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().
Note: A maioria dos sistemas requerem acesso de administrador para criar um socket de servidor em portas abaixo de 1024.
Example #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);
?>
Notas
Note: 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
.
Veja Também
- stream_socket_client() - Abre conexão de socket de domínio Internet ou Unix
- stream_set_blocking() - Definir modo de bloqueio/não-bloqueio em um fluxo
- stream_set_timeout() - Define o limite de tempo em um fluxo
- fgets() - Lê uma linha de um ponteiro de arquivo
- fgetss() - Ler uma linha de um ponteiro de arquivo e retira as tags HTML
- fwrite() - Escrita binary-safe em arquivos
- fclose() - Fecha um ponteiro de arquivo aberto
- feof() - Testa pelo fim-de-arquivo em um ponteiro de arquivo
- Extensão Curl