stream_socket_server

(PHP 5, PHP 7, PHP 8)

stream_socket_serverCria socket de servidor de domínio Internet ou Unix

Descrição

stream_socket_server(
    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çã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.

Note:

Para sockets UDP, deve ser usado STREAM_SERVER_BIND como o parâmetro flags.

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