sub-rotina sendmsg

Propósito

Envia uma mensagem de um soquete usando uma estrutura de mensagens.

Biblioteca

Biblioteca C Padrão (libc.a)

Sintaxe

#include <sys/types.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
int sendmsg ( Socket,  Message,  Flags)
int Socket;
const struct msghdr Message [ ];
int Flags;

Descrição

A subroutine sendmsg envia mensagens através de soquetes conectados ou não conectados usando a estrutura de mensagens msghdr . O arquivo /usr/include/sys/socket.h contém a estrutura msghdr e define os membros da estrutura. No BSD 4.4, o tamanho e os membros da estrutura da mensagem msghdr foram modificados Os aplicativos que desejam iniciar a estrutura antiga precisam compilar com COMPAT_43 definido. O comportamento padrão é o do BSD 4.4

Para transmitir em um socket, o programa de aplicativos deve primeiro emitir um subroutine setsockopt usando a opção SO_BROADCAST para ganhar permissões de transmissão.

A subroutina sendmsg suporta apenas 15 elementos de mensagem.

Todos os aplicativos contendo a subroutine sendmsg devem ser compilados com o macro conjunto _BSD para um valor específico. Os valores aceitáveis são 43 e 44. Além disso, todos os aplicativos de soquete devem incluir a biblioteca BSD libbsd.a ..

A rotina sendmsg suporta elementos de dados complementares IPv6 conforme definido na API de Advanced Sockets para IPv6.

Parâmetros

Item Descrição
Soquete Especifica o descritor de socket.
Mensagem Aponta para a estrutura de mensagem msghdr contendo a mensagem a ser enviada.
Sinalizações Permite que o remetente controle a transmissão da mensagem. O arquivo sys/socket.h contém o parâmetro Flags . O Parâmetro Flags usado para enviar uma chamada é formado logicamente ORing um ou ambos os valores a seguir:
MSG_OOB
Processa dados out-of-band em soquetes que suportam SOCK_STREAM.
Nota: O valor a seguir não é para uso geral. Trata-se de uma ferramenta administrativa utilizada para depuração ou para programas de roteamento.
MSG_DONTROUTE
Envia sem usar tabelas de roteamento.
MSG_MPEG2
Indica que este bloco é um bloco MPEG2 . Ele só se aplica aos tipos de soquetes SOCK_CONN_CONN_DGRAM apenas.

Valores De Retorno

Após a conclusão bem-sucedida, a subroutine sendmsg retorna o número de caracteres enviados.

Se a subroutine sendmsg não for bem-sucedida, o manipulador do sistema 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 sendmsg 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 Socket 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 não tem seu conjunto de endereços de pares.
EFAULT O parâmetro Address 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 interrompeu a subroutina sendmsg antes de qualquer dado ser transmitido.
EINVAL O comprimento da estrutura msghdr é inválido.
EISCONN Um soquete SOCK_DGRAM já está conectado.
EMSGSIZE A mensagem é muito grande para ser enviada tudo de uma só vez (como o soquete requer), ou o membro msg_iovlen da estrutura msghdr apontada pelo parâmetro Messages é menor ou igual a 0 ou é maior que IOV_MAX.
ENOENTE O nome do caminho não aponta um arquivo existente, ou o nome do caminho é uma string vazia.
ENETUNREACH A rede de destino não é alcançável.
ENOBUFS O sistema ficou sem memória para uma estrutura de dados interna.
ENOMEM O espaço de dados disponível na memória não é grande o suficiente para manter informações de listas de controle de grupo ou de controle de acesso (ACL).
ENOPROTOOPT O protocolo não é 64-bit apoiado.
ENOTCONN O socket está em modo de conexão mas não está conectado.
ENOTSOCK O parâmetro Socket refere-se a um arquivo, não a um soquete.
EOPNOTSUPP O argumento socket está associado a um socket que não suporta um ou mais dos valores configurados em flags.
EPIPE Uma tentativa foi feita para enviar em um socket que estava conectado, mas a conexão é desativada 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.