Essas funções do Socket se comunicam diretamente com o protocolo da Internet para enviar informações. Comparados com os fluxos do fopensock, eles operam em um nível relativamente baixo. Normalmente, eles encapsulam funções C e têm nomes semelhantes. Se você tem experiência com programação de soquetes em C, ficará muito confortável usando essas funções. Não discutiremos a programação de soquetes em detalhes especiais aqui.
Use essas funções para resolver problemas difíceis que as funções de nível superior não conseguem. O uso dessas funções pode obter funções semelhantes ao fopen. Você pode ter muitas maneiras de implementar funções de soquete, como o daemon da Internet implementado usando CLI (Command-line Interface) em PHP.
soquete de recurso_accept (soquete de recurso)
No lado do servidor do seu script, use socket_accept para aceitar uma conexão de entrada. Você deve primeiro criar um soquete, vinculá-lo a um nome e configurá-lo para escutar em uma porta. No modo de bloco, socket_accept irá gerar uma conexão aceita exclusiva. No modo sem bloqueio, retorna falso se nenhuma conexão for estabelecida. Além disso, quando você tiver um novo recurso de soquete, poderá realizar operações de leitura e gravação.
Abaixo demonstraremos um servidor de eco simples. Ele é executado na CLI (linha de comando) e aguarda conexões do cliente na porta 12345.
soquete_accept
<?php
set_time_limit(0);
//cria o soquete
if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("Não foi possível criar o soquete: " . socket_strerror(socket_last_error()) . "n");
}
//vinculá-lo ao endereço e porta fornecidos
if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("Não foi possível vincular o soquete: " . socket_strerror(socket_last_error()) . "n");
}
if(($erro = socket_listen($socket, 5)) < 0){
print("Não foi possível listar no socket: " .
socket_strerror(socket_last_error()) "n");
}
enquanto(VERDADEIRO){
//espera pela conexão
if(($accept = socket_accept($socket)) < 0){
print("Erro ao ler: " . socket_strerror($message) . "n");
quebrar;
}
//envia mensagem de boas vindas
socket_write($accept, "Conexão aceitan");
print(date('Ymd H:i:s') . " STATUS: Conexão aceitan");
ob_flush();
enquanto(VERDADEIRO){
//lê a linha do cliente
if(FALSO === ($linha = socket_read($accept, 1024))){
print("Não foi possível ler no socket: " .
socket_strerror(socket_last_error()) "n");
pausa 2;
}
if( !@socket_write($accept , "ECHO: $line")){
print(date('Ymd H:i:s') . " STATUS: Conexão interrompidan");
quebrar;
}
print(data('Ymd H:i:s'). " LER: $linha");
ob_flush();
}
socket_close($aceitar);
}
?>
bool socket_bind(soquete de recurso, endereço de string, porta inteira)
Este socket_bind() vincula um recurso de soquete a um endereço. Este soquete deve ser um recurso retornado pela função socket_create(). Este endereço deve ser um endereço IP ou um caminho para um soquete Unix. Se for um soquete rodando na Internet, você também deverá fornecer uma porta.
socket_clear_error(soquete de recurso)
Esta função pode limpar erros para o soquete especificado. Se nenhum parâmetro for especificado, todos os erros de soquete serão apagados.
socket_close(soquete de recurso)
A função socket_close fecha um soquete e limpa os recursos de memória ocupados pelo soquete.
boolean socket_connect (soquete de recurso, endereço de string, porta inteira)
Esta função cria uma conexão de cliente a uma porta ou soquete. Você deve fornecer um soquete gerado por socket_create. O parâmetro address deve ser o caminho para um soquete ou endereço IP. Se for o último, também deverá ser seguido por um número de porta numérico.
O exemplo a seguir demonstra o processo de conexão ao servidor do jogo e obtenção de informações usando o protocolo UDP.
soquete_conectar
<?php
//cria soquete UDP
if(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("Não foi possível criar o soquete: ".
socket_strerror(socket_last_error()) "n");
}
//tempo limite após 5 segundos
socket_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//conecta-se ao servidor mestre RtCW
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("Não foi possível conectar: ".
socket_strerror(socket_last_error()) "n");
}
//envia solicitação para servidores
socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//obtém servidores
$servidor = array();
while(FALSE !== ($line = @socket_read($socket, 4096))){
//analisa dados
for($i=22; ($i+5) < strlen($linha); $i += 7){
$ip = ord(substr($linha, $i+1, 1)) .
ord(substr($linha, $i+2, 1)) .
ord(substr($linha, $i+3, 1)) .
ordem(substr($linha, $i+4, 1));
$porta = (ord(substr($linha, $i+5, 1)) * 256) +
ordem(substr($linha, $i+6, 1));
$servidor[] = array('ip'=>$ip, 'porta'=>$porta);
}
}
print("<h1>" .count($server) . " Servidores</h1>n");
//loop pelos servidores, obtendo status
foreach($servidor as $s){
print("<h1>{$s['ip']}:{$s['port']}</h1>n");
//conecta ao servidor RtCW
if(!socket_connect($socket, $s['ip'], $s['porta'])){
print("<p>n" .
soquete_strerror(socket_last_error()) .
"n</p>n");
continuar;
}
//envia solicitação de status
socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
//obtém o status do servidor
if(FALSO === ($linha = @socket_read($socket, 1024))){
print("<p>n" .
soquete_strerror(socket_last_error()) .
"n</p>n");
continuar;
}
$parte = explodir("n", $linha);
//as configurações estão na segunda linha separadas por barras invertidas
$configuração = explodir("\", $parte[1]);
print("<h2>Configuração</h2>n");
imprimir("<p>n");
for($s=1; $s < contagem($configuração); $s += 2){
print("tt{$configuração[$s]} = {$configuração[$s+1]}<br>n");
}
imprimir("</p>n");
print("<h2>Jogadores</h2>n");
$últimoJogador = contagem($parte) - 1;
for($p=2; $p < $últimoJogador; $p++){
$jogador = explodir(" ", $parte[$p]);
print("{$jogador[2]} Pontuação={$jogador[0]} " .
"Ping={$jogador[1]}<br>n");
}
imprimir("</p>n");
ob_flush();
}
imprimir("</table>n");
soquete_close($soquete);
?>
recurso socket_create (família inteira, tipo de soquete inteiro, protocolo inteiro)
socket_create inicializa uma estrutura de soquete. O primeiro parâmetro é uma família de protocolos ou domínio. Você deve usar AF_INET para especificar uma conexão com a Internet ou AF_UNIX para especificar uma conexão de soquete Unix. O segundo parâmetro é um tipo de soquete, que você pode escolher na tabela abaixo. Geralmente, use SOCK_STREAM para usar o protocolo TCP e o protocolo UDP para usar SOCK_DGRAM. O terceiro parâmetro especifica um protocolo. Use SOL_TCP ou SOL_UDP para corresponder aos protocolos TCP e UDP respectivamente. Outra opção é que você pode usar a função getprotobyname para lidar com isso.
Descrição constante do tipo de soquete
SOCK_DGRAM endereça automaticamente o soquete do pacote
Interface de protocolo SOCK_RAW RAW
Troca confiável de mensagens SOCK_RDM
Soquete de pacote de dados sequencial SOCK_SEQPACKET
Soquete de fluxo SOCK_STREAM
recurso socket_create_listen (porta inteira, backlog inteiro)
Usar socket_create_listen é um método mais simples que socket_create para gerar um soquete para escuta. O soquete gerado escutará a porta especificada e o parâmetro opcional backlog é definir o número máximo de conexões permitidas.
boolean socket_create_pair (família inteira, tipo inteiro de soquete, protocolo inteiro, identificadores de array)
A função socket_create_pair gera um par de conexões de soquete. Em primeiro lugar, os três primeiros parâmetros são uma descrição de um socket_create. O parâmetro handles é um array contendo dois recursos de soquete. Esta função é um encapsulamento da função socketpair em C.
soquete_create_pair
<?php
if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("Não foi possível criar soquetes!n");
saída();
}
$filho = pcntl_fork();
if($filho == -1){
print("Não foi possível fazer o fork!n");
saída();
}
elseif($filho > 0){
//pai
socket_close($socket[0]);
print("Pai: aguardando mensagemn");
$mensagem = socket_read($socket[1], 1024, PHP_NORMAL_READ);
print("Pai: recebi mensagem--$mensagemn");
socket_write($socket[1], "Olá, Processo Filho!n");
pcntl_waitpid($filho, $status);
}outro{
//criança
socket_close($socket[1]);
socket_write($socket[0], "Olá, processo pai!n");
print("Criança: aguardando mensagemn");
$mensagem = socket_read($socket[0], 1024, PHP_NORMAL_READ);
print("Criança: recebi mensagem--$mensagemn");
saída(0);
}
?>
valor socket_get_option(soquete de recurso, nível inteiro, opção inteira)
A função socket_get_option retorna um valor adicionado listado na tabela a seguir. Você deve fornecer um recurso de soquete gerado por socket_create e um nível. Este nível de soquete obtido pode ser determinado usando SOL_SOCKET. Alternativamente, use um protocolo como SOL_TCP para representar um protocolo TCP. Estas opções podem ser definidas por socket_set_option.
soquete_get_options
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
print('SO_BROADCAST: '.
socket_get_option($socket, SOL_SOCKET,
SO_BROADCAST) "<br>n");
print('SO_DEBUG: '.
socket_get_option($socket, SOL_SOCKET,
SO_DEBUG) "<br>n");
print('SO_DONTROUTE: '.
socket_get_option($socket, SOL_SOCKET,
SO_DONTROUTE) "<br>n");
print('SO_ERRO: '.
socket_get_option($socket, SOL_SOCKET,
SO_ERRO) "<br>n");
print('SO_KEEPALIVE: '.
socket_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) "<br>n");
print('SO_LINGER: '.
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER), VERDADEIRO) "<br>n");
print('SO_OOBINLINE: '.
socket_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) "<br>n");
print('SO_RCVBUF: '.
socket_get_option($socket, SOL_SOCKET,
SO_RCVBUF) "<br>n");
print('SO_RCVLOWAT: '.
socket_get_option($socket, SOL_SOCKET,
SO_RCVLOWAT) "<br>n");
print('SO_RCVTIMEO: '.
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO), TRUE) "<br>n");
print('SO_REUSEADDR: '.
socket_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) "<br>n");
print('SO_SNDBUF: '.
socket_get_option($socket, SOL_SOCKET,
SO_SNDBUF) "<br>n");
print('SO_SNDLOWAT: '.
socket_get_option($socket, SOL_SOCKET,
SO_SNDLOWAT) "<br>n");
print('SO_SNDTIMEO: '.
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO), TRUE) "<br>n");
print('SO_TYPE: '.
socket_get_option($socket, SOL_SOCKET,
SO_TYPE) "<br>n");
?>
Descrição da opção da tabela de opções de soquete
SO_BROADCAST permite que soquetes endereçados automaticamente enviem e recebam pacotes de transmissão
SO_DEBUG ativa a função de depuração de soquete. Somente o root tem permissão para ativar esta opção.
SO_DONTROUTE não aceita pacotes de roteamento através do gateway
SO_ERROR Obtém e limpa o último erro de soquete. Esta opção pode não precisar ser definida.
SO_KEEPALIVE Abra uma mensagem que permanece ativa
SO_LINGER Socket_colse e socket_shutdown anulam o tempo limite de envio da mensagem, esta opção usa um array, incluindo as duas chaves l_onoff e l_linger.
SO_OOBINLINE insere dados diretamente no buffer de recebimento
SO_RCVBUF limita o número máximo de bytes que podem ser armazenados em buffer
SO_RCVLOWAT atrasa aceitando um mínimo de dados
SO_RCVTIMEO Atrasa o relatório de um tempo limite de aceitação, usando duas chaves do array: sec e usec
SO_REUSEADDR permite a reutilização de endereços locais
SO_SNDBUF limita o máximo de bytes do buffer de envio
SO_SNDLOWAT atrasa o envio de dados para este protocolo enquanto aceita um mínimo de bytes
SO_SNDTIMEO Atrasa o relatório de erros de tempo limite quando um remetente ultrapassa o tempo limite. Esta opção usa as chaves do array: sec e usec
soquete
. Esta opção pode não precisar ser definida.
socket_getpeername obtém o endereço e a porta de uma conexão especificada. Se a conexão for um soquete Unix, o caminho para o sistema de arquivos será retornado.
boolean socket_getsockname(soquete de recurso, endereço de string, porta inteira)
socket_getsockname coloca um nome no soquete e adiciona o endereço e os parâmetros de porta. Retorna falso em caso de falha.
(Não sei muito sobre as funções socket_iovec_* abaixo, então não me atrevo a traduzi-las aleatoriamente, então mantenho o texto original)
booleano socket_iovec_add (recurso iovector, comprimento inteiro)
A função socket_iovec_add adiciona um vetor de E/S ao array scatter/gather.
recurso socket_iovec_alloc (contagem de números inteiros,…)
A função socket_iovec_alloc retorna um recurso para manipular uma coleção de vetores de E/S. O primeiro argumento especifica o número de vetores.
booleano socket_iovec_delete (recurso iovector, posição inteira)
A função socket_iovec_delete remove o vetor de E/S na posição especificada.
string socket_iovec_fetch(recurso iovector, posição inteira)
A função socket_iovec_fetch retorna o valor do vetor especificado no recurso de vetor de E/S.
booleano socket_iovec_free (recurso iovector)
A função socket_iovec_free libera a memória usada para um recurso de vetor de E/S.
booleano socket_iovec_set (recurso iovector, posição inteira, valor da string)
O socket_iovec_set define o valor do vetor de E/S na posição fornecida.
inteiro socket_last_error (soquete de recurso)
A função socket_last_error retorna o último erro gerado por qualquer função de soquete na operação. Você pode ter definido a opção de soquete do recurso de soquete na conexão especificada na função acima. A tabela a seguir lista os códigos de erro retornados. Você também pode usar a função soclet_strerror para obter erros detalhados. Use a função socket_clear_error para limpar erros de soquete.
Descrição constante da tabela de códigos de erro de soquete
Lista de parâmetros SOCKET_E2BIG muito longa
SOCKET_EACCES não tem permissão
O endereço SOCKET_EADDRINUSE já está em uso
SOCKET_EADDRNOTAVAIL não pode resolver o endereço solicitado
Erro de transmissão (anúncio) SOCKET_EADV
Protocolo SOCKET_EAFNOSUPPORT não suportado pela família de endereços
O recurso SOCKET_EAGAIN está temporariamente indisponível
A operação SOCKET_EALREADY já está em execução
SOCKET_EBADE Troca inválida
Descritor de arquivo inválido SOCKET_EBADF
Status de erro do descritor de arquivo SOCKET_EBADFD
Mensagem de erro SOCKET_EBADMSG
SOCKET_EBADR Descrição de solicitação inválida
SOCKET_EBADRQC Código de solicitação inválido
SOCKET_EBADSLT Local de operação inválido
SOCKET_EBUSY O driver ou recurso está ocupado
Número do canal SOCKET_ECHRNG fora do intervalo
SOCKET_ECOMM Enviar erro de comunicação
SOCKET_ECONNABORTED Interrupção de tráfego por motivos de software
Conexão SOCKET_ECONNREFUSED recusada
SOCKET_ECONNRESET A conexão é redefinida pelo mesmo soquete
SOCKET_EDESTADDRREQ deve exigir o endereço de destino
Cota de disco SOCKET_EDQUOT excedida
O arquivo SOCKET_EEXIST já existe
SOCKET_EFAULT endereço errado
O host SOCKET_EHOSTDOWN está inativo
SOCKET_EHOSTUNREACH não é roteado para o host
SOCKET_EIDRM indica que o ID foi excluído
A operação SOCKET_EINPROGRESS está em execução
Chamada de sistema SOCKET_EINTR bloqueada
Parâmetro SOCKET_EINVAL inválido
Erro de entrada/saída SOCKET_EIO
O terminal de transmissão SOCKET_EISCONN foi conectado
SOCKET_EISDIR é um diretório
SOCKET_EISNAM é um arquivo de tipo especificado
SOCKET_EL2HLT Nível 2 abortado
SOCKET_EL2NSYNC Nível 2 fora de sincronia
SOCKET_EL3HLT Nível 3 abortado
SOCKET_EL3RST Nível 3 foi redefinido
O número de conexão SOCKET_ELNRNG está fora do alcance
SOCKET_ELOOP Muitos níveis de links simbólicos
SOCKET_EMEDIUMTYPE Tipo de mídia incorreto (tipo intermediário)
SOCKET_EMFILE Muitos arquivos abertos
SOCKET_EMLINK Muitas conexões
A mensagem SOCKET_EMSGSIZE é muito longa
SOCKET_EMULTIHOP Muitas tentativas
Nome do arquivo SOCKET_ENAMETOOLONG muito longo
A rede SOCKET_ENETDOWN está inoperante
SOCKET_ENETRESET A rede foi interrompida e a conexão foi reiniciada.
SOCKET_ENETUNREACHA rede está inacessível
SOCKET_ENFILE Muitos arquivos abertos no sistema
SOCKET_ENOANO Sem pólo positivo
SOCKET_ENOBUFS Nenhum espaço de cache disponível
SOCKET_ENOCSI Nenhuma estrutura CSI disponível
SOCKET_ENODATA Nenhum dado disponível
SOCKET_ENODEV Esse driver não existe
SOCKET_ENOENT Arquivo ou diretório inexistente
SOCKET_ENOLCK Nenhum bloqueio de registro disponível
Conexão SOCKET_ENOLINK com um serviço existente
SOCKET_ENOMEDIUM Nenhuma mídia encontrada
SOCKET_ENOMEM não pode alocar memória
SOCKET_ENOMSG Nenhum tipo de mensagem especificado
O dispositivo SOCKET_ENONET não está na rede
O protocolo SOCKET_ENOPROTOOPT não está disponível
SOCKET_ENOSPC Sem espaço na unidade
SOCKET_ENOSR excedeu o recurso de stream
O driver SOCKET_ENOSTR não é um fluxo
A função SOCKET_ENOSYS não é executada
O driver de bloco SOCKET_ENOTBLK é necessário
SOCKET_ENOTCONN O terminal de transmissão não está conectado
SOCKET_ENOTDIR não possui um diretório
O diretório SOCKET_ENOTEMPTY está vazio
SOCKET_ENOTSOCK Operação de soquete em um não-soquete
SOCKET_ENOTTY Controlador IO incompatível
O nome SOCKET_ENOTUNIQ não é exclusivo na rede
SOCKET_ENXIO Nenhum driver ou endereço
A operação SOCKET_EOPNOTSUPP não é suportada
Operação SOCKET_EPERM não permitida
A família de protocolos SOCKET_EPFNOSUPPORT não é suportada
Tubo com falha em SOCKET_EPIPE
Erro de protocolo SOCKET_EPROTO
O protocolo SOCKET_EPROTONOSUPPORT não é suportado
SOCKET_EPROTOTYPE O tipo de erro de protocolo no Socket
O endereço remoto SOCKET_EREMCHG foi alterado
O objeto SOCKET_EREMOTE é remoto
Erro de E/S remota SOCKET_EREMOTEIO
SOCKET_ERESTART A chamada do sistema interrompida será reiniciada
O sistema de arquivos SOCKET_EROFS é somente leitura
SOCKET_ESHUTDOWN. A interrupção do terminal de transmissão não pode ser enviada.
SOCKET_ESOCKTNOSUPPORT O tipo de soquete não é suportado
Pesquisa ilegal SOCKET_ESPIPE
Erro de canal de fluxo SOCKET_ESTRPIPE
O cronômetro SOCKET_ETIME expira
Tempo limite de conexão SOCKET_ETIMEDOUT
SOCKET_ETOOMANYREFS Muitas conexões para combinar
SOCKET_EUNATCH Não é possível anexar driver de protocolo
SOCKET_EUSERS Muitos usuários
O recurso SOCKET_EWOULDBLOCK está temporariamente indisponível
SOCKET_EXDEV Conexão cruzada inválida
A troca SOCKET_EXFULL é
booleana completa socket_listen (soquete de recurso, backlog inteiro)
Esta função socket_listen aguarda conexões do cliente. O parâmetro backlog define o número máximo de filas permitidas para aguardar conexões.
string socket_read(soquete de recurso, comprimento inteiro, tipo inteiro)
A função socket_read lê os bytes especificados de um soquete específico e retorna falso se houver um erro. Por padrão, o modo de leitura seguro para binário é usado. Você pode alterar o modo de leitura definindo externamente o parâmetro de tipo como PHP_BINARY_READ. Você também pode definir o tipo como PHP_NORMAL_READ.
booleano socket_readv (soquete de recurso, iovetor de recurso)
A função socket_readv insere os dados lidos no recurso iovector.
inteiro socket_recv (soquete de recurso, buffer de string, comprimento inteiro, sinalizadores inteiros)
A função socket_recv lê os dados e os insere no buffer. O parâmetro Length define o número máximo de bytes a serem lidos e o parâmetro flag pode usar MSG_OOB ou MSG_PEEK. A função retorna o número de bytes lidos.
inteiro socket_recvfrom (soquete de recurso, buffer de string, comprimento inteiro, host de string, porta inteira)
A função socket_frcvfrom lê os dados e os insere no cache. O parâmetro Length define o número máximo de bytes que podem ser recebidos. O parâmetro flags pode ser definido como MSG_OOB ou MSG_PEEK. O PHP define os parâmetros host e port com valores apropriados para poder obter os dados enviados do host.
boolean socket_recvmsg (soquete de recurso, iovetor de recurso, controle de array, comprimento inteiro, sinalizadores inteiros, host de string, porta inteira)
A função socket_recvmsg lê dados do soquete e os insere em um recurso de vetor de E/S. O parâmetro de controle de configuração do PHP é uma matriz associativa com três elementos: cmsg_level, cmsg_type e cmsg_data. O parâmetro Length é um parâmetro de comprimento anexado aos dados sobre a obtenção dos dados. O parâmetro Flags define os valores permitidos e os valores de retorno. No momento em que este artigo foi escrito, o PHP não conseguia executar todas as constantes de saída. O PHP define os parâmetros host e port com valores apropriados para obter dados enviados do host remoto.
(A função Socket_slect não é traduzida porque temo que as palavras não transmitam o significado)
inteiro socket_select (leitura de array, gravação de array, exceção de array, timeout_seconds inteiro, timeout_microseconds inteiro)
A função socket_select espera por mudanças nos soquetes. O PHP observa os soquetes fornecidos no array de leitura para novos dados chegando. O PHP observa os fluxos fornecidos no array de gravação para estar pronto para aceitar mais dados. para erros. Se o número de segundos especificado no argumento timeout_seconds for aprovado, a função retornará. Use o argumento opcional timeout_microseconds para especificar um tempo limite inferior a 1 segundo.
A função socket_select retorna o número de soquetes que foram alterados ou FALSE se ocorreu um erro. Se o tempo limite da chamada expirou, esta função também modifica os arrays fornecidos para que incluam apenas os soquetes que foram alterados.
Se você não tiver soquetes de um tipo específico para monitorar, poderá passar um array vazio ou uma variável definida como NULL.
inteiro socket_send (soquete de recurso, buffer de string, comprimento inteiro, sinalizadores inteiros)
A função socket_send grava dados no buffer e os insere na conexão. Você deve especificar um número máximo de bytes graváveis para o buffer. Você também pode definir o parâmetro flags como vazio ou como uma das seguintes constantes combinadas: MSG_DONTROUTE e MSG_OOB. A função termina e retorna o número de bytes escritos, caso contrário retorna falso.
boolean socket_sendmsg (soquete de recurso, iovetor de recurso, sinalizadores inteiros, endereço de string, porta inteira)
socket_sendmsg tenta enviar dados para um soquete. É adequado para tomadas sem conexão. O parâmetro Iovector é um recurso gerado pela função socket_iovec_alloc. Você deve especificar o parâmetro flags como: NULL, MSG_DONTROUTE, MSG_OOB ou duas constantes combinadas. Você deve especificar um endereço e uma porta para solicitações de Internet.
A função Socket_sendmsg retorna verdadeiro ao enviar dados, mas não há garantia de que os dados chegarão.
inteiro socket_sendto (soquete de recurso, buffer de string, comprimento inteiro, sinalizadores inteiros, endereço de string, porta inteira)
A função socket_sendto tenta gravar dados no buffer e enviá-los para um soquete. É adequado para a maioria dos soquetes sem conexão. Você deve especificar sinalizadores como: NULL, MSG_DONTROUTE, MSG_OOB ou uma combinação de duas constantes. Você também deve especificar o endereço e uma porta solicitada.
A função Socket_sendto retorna verdadeiro quando os dados são enviados, mas não há garantia de que os dados chegarão.
booleano socket_set_block(soquete de recurso)
A função socket_set_block define o soquete em um modo de bloco, que é o modo padrão. No modo de bloco, as operações de E/S são executadas em uma solicitação concluída.
booleano socket_set_nonblock(soquete de recurso)
A função socket_set_nonblock define o soquete para ser inserido em qualquer modo sem bloco. No modo sem bloco, as operações de E/S retornam imediatamente, mesmo se não houver dados.
boolean socket_set_option(soquete de recurso, nível inteiro, opção inteira, valor inteiro)
A função socket_set_option define uma opção para o soquete. O parâmetro Level define uma constante que sinaliza o nível. Os valores válidos incluem: SOL_SOCKET, SOL_TCP e SOL_UDP. Os parâmetros Option devem corresponder às constantes na tabela de opções de soquete acima.
boolean socket_shutdown(soquete de recurso, número inteiro como)
A função socket_shutdown fecha um soquete para E/S. Definir como 0 interromperá o recebimento de dados, definir como 1 interromperá o envio de dados e definir como 2 interromperá ambas as operações.
string socket_strerror (erro inteiro)
A função socket_strerror retorna um número de erro e informações detalhadas sobre o erro.
inteiro socket_write (soquete de recurso, buffer de string, comprimento inteiro)
A função socket_write grava dados no buffer e os envia para o soquete. Você pode especificar o parâmetro length para especificar o número máximo de bytes no buffer. Esta função geralmente é mais conveniente que socket_send.
booleano socket_writev (soquete de recurso, iovetor de recurso)
A função socket_writev grava dados em um soquete por meio de vetores de E/S.