enviar Subroutine
Propósito
Envia mensagens de um soquete conectado.
Biblioteca
Biblioteca C Padrão (libc.a)
Sintaxe
Descrição
A subroutine enviar envia uma mensagem apenas quando o soquete está conectado. Esta subroutina em um soquete não é thread segura. As subroutines sendto e sendmsg podem ser usadas com soquetes desconectados ou conectados.
Para transmitir em um socket, primeiro emita uma subroutinha setsockopt usando a opção SO_BROADCAST para ganhar permissões de transmissão.
Especifique o comprimento da mensagem com o parâmetro Comprimento . Se a mensagem for muito longa para passar pelo protocolo subjacente, o sistema retorna um erro e não transmite a mensagem.
Nenhuma indicação de falha na entrega está implícita em uma subroutina enviar . Um valor de retorno de -1 indica alguns erros detectados localmente.
Se nenhum espaço para mensagens estiver disponível no soquete de envio para segurar a mensagem a ser transmitida, os blocos subroutine enviar a menos que o socket esteja em um modo de E/S sem bloqueio. Use a subroutine selecionar para determinar quando é possível enviar mais dados.
Os aplicativos socket podem ser compilados com COMPAT_43 definidos. Isso tornará a estrutura sockaddr BSD 4.3 compatível. Para obter mais detalhes, consulte socket.h..
Parâmetros
| Item | Descrição |
|---|---|
| Soquete | Especifica o nome exclusivo para o soquete. |
| Mensagem | Aponta para o endereço da mensagem a enviar. |
| Duração | Especifica o comprimento da mensagem em bytes. |
| Sinalizações | Permite que o remetente controle a transmissão da mensagem. O parâmetro Bandeiras usado para enviar uma chamada é formado logicamente ORing um ou ambos os valores mostrados na lista a seguir:
|
Valores De Retorno
Após a conclusão bem-sucedida, a subroutine enviar retorna o número de caracteres enviados.
Se a subroutine enviar não for bem sucedida, o manipulador de subroutine executa as seguintes funções:
- Retorna um valor de -1 para o programa de chamada.
- Move um código de erro, indicando o erro específico, na variável global errno .
Códigos De Erro
A subroutine não é bem-sucedida se ocorrer qualquer um dos seguintes erros:
| Erro | Descrição |
|---|---|
| EACCES | O acesso de gravação ao socket nomeado é negado, ou o socket tentando enviar um pacote de broadcast não tem capacidade de transmissão. |
| EADDRNOTAVAIL | O endereço especificado não é um endereço válido. |
| EAFNOSUPPORT | O endereço especificado não é um endereço válido para a família de endereços deste soquete. |
| EBADF | O parâmetro Soquete não é válido. |
| ECONNRESET | Uma conexão foi forcivelmente fechada por um peer. |
| EDESTADDRREQ | O socket não está em modo de conexão e nenhum endereço de ponto é configurado. |
| EFAULT | O parâmetro Endereço não está em uma parte gravável do espaço de endereço do usuário. |
| EHOSTUNREACH | O host de destino não pode ser alcançado. |
| EINTR | Um sinal interrompido enviar antes de qualquer dado ser transmitido. |
| EINVAL | O parâmetro Comprimento é inválido. |
| EISCONN | Um soquete SOCK_DGRAM já está conectado. |
| EMSGSIZE | A mensagem é muito grande para ser enviada tudo de uma vez, como o soquete requer. |
| ENETUNREACH | A rede de destino não é alcançável. |
| ENOBUFS | Recursos insuficientes estavam disponíveis no sistema para realizar a operação. |
| ENOENTE | O nome do caminho não nomeia um arquivo existente, ou o nome do caminho é uma string vazia. |
| ENOMEM | O espaço de dados disponível na memória não é grande o suficiente para manter informações do group/ACL. |
| ENOTSOCK | O parâmetro Soquete refere-se a um arquivo, não a um soquete. |
| EOPNOTSUPP | O argumento socket é associado a um socket que não suporta um ou mais dos valores configurados em Bandeiras. |
| EPIPE | Uma tentativa foi feita para enviar em um socket que estava conectado, mas a conexão foi encerrada tanto pelo peer remoto ou por este lado da conexão. Se o socket for do tipo SOCK_STREAM, o sinal SIGPIPE é gerado para o processo de chamada. |
| EWOULDBLOCK | O soquete é marcado sem bloqueio, e nenhuma conexão está presente para ser aceita. |