enviar Subroutine

Propósito

Envia mensagens de um soquete conectado.

Biblioteca

Biblioteca C Padrão (libc.a)

Sintaxe

#include <sys/types.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
int send (Socket,
Message, Length, Flags)
int  Socket;
const void * Message;
size_t  Length;
int  Flags;

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:
MSG_OOB
Processa dados out-of-band em soquetes que suportam a comunicação SOCK_STREAM .
MSG_DONTROUTE
Envia sem usar tabelas de roteamento.
MSG_MPEG2
Indica que este bloco é um bloco MPEG2 . Esta sinalização é válida SOCK_CONN_DGRAM tipos de soquetes apenas.

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.