Linux repositories inspector
Página de manual do Linux
7/05/1999

manpages-pt

Portuguese Versions of the Manual Pages

manpages

Manual pages about using a GNU/Linux system

man-pages

Linux kernel and C library user-space interface documentation

NOME

socket - interface para socket Linux

SINOPSE

#include <sys/socket.h>
mysocket = socket(int socket_family, int socket_type, int protocol);

DESCRIÇÃO

Esta página do manual descreve a interface de usuário para a camada de socket de rede Linux. Os sockets compatíveis com BSD são uma interface uniforme entre o processo do usuário e as pilhas de protocolo de rede no kernel. Os módulos de protocolo estão agrupados em famílias de protocolos como PF_INET, PF_IPX, PF_PACKET e tipos de socket como SOCK_STREAM ou SOCK_DGRAM. Veja socket(2) para mais informações sobre famílias e tipos.

FUNÇÕES DA CAMADA DE SOCKET

Estas funções são usadas pelo processo do usuário para enviar ou receber pacotes, e realizar outras operações de socket. Para mais informações, veja as respectivas páginas de manual.
socket(2) cria um socket, connect(2) conecta um socket a um endereço de socket remoto, a função bind(2) liga um socket a um endereço de socket local, listen(2) diz ao socket que novas conexões serão aceitas, e accept(2) é usado para obter um novo socket com uma nova conexão de entrada. socketpair(2) retorna dois sockets anônimos conectados (somente implementados para algumas famílias locais, como PF_UNIX)
send(2), sendto(2), e sendmsg(2) enviam dados através de um socket, e recv(2), recvfrom(2), recvmsg(2) recebem dados de um socket. poll(2) e select(2) aguardam por dados que chegam ou um estado de prontidão para enviar dados. Além disso, as operações padrão de I/O como write(2), writev(2), sendfile(2), read(2), e readv(2) podem ser usados para ler e escrever dados.
getsockname(2) retorna o endereço local do socket e getpeername(2) retorna o endereço remoto do socket. getsockopt(2) e setsockopt(2) são usados para setar ou obter opções da camada de socket ou do protocolo. ioctl(2) pode ser usado para setar ou ler algumas outras opções.
close(2) é usado para encerrar um socket. shutdown(2) encerra partes de uma conexão de socket "full duplex".
A busca ou a chamada de pread(2) ou pwrite(2) com uma posição diferente de zero não são suportados em sockets.
É possível fazer IO não-bloqueável em sockets configurando-se o flag O_NONBLOCK em um descritor de arquivo de socket, usando fcntl(2). O_NONBLOCK é herdado através de um accept. Então todas as operações que normalmente bloqueariam (geralmente) retornarão com EAGAIN; connect(2) retorna um erro do tipo EINPROGRESS neste caso. O usuário pode então esperar por vários eventos, via poll(2) ou select(2).
I/O events
Evento Poll flag Ocorrência
Read POLLIN Novo dado chegou.
Read POLLIN Uma configuração de conexão foi completada (para sockets orientados à conexão)
Read POLLHUP Um pedido de desconexão foi iniciado pelo outro extremo.
Read POLLHUP Uma conexão foi quebrada (somente para protocolos orientados à conexão). Quando o socket é escrito, é enviado também.
Write POLLOUT O socket tem espaço de buffer suficiente para escrever novos dados.
Read/Write POLLIN|
POLLOUT
Um externo terminou.
Read/Write POLLERR Ocorreu um erro assíncrono.
Read/Write POLLHUP O outro extremo desligou uma direção.
Exception POLLPRI Dado urgente chegou. é enviado, então.
Uma alternativa para poll/select é deixar o kernel informar o aplicativo sobre eventos através do sinal SIGIO
.Para isso, o flag FASYNC deve ser configurado em um descritor de arquivo de socket através fcntl(2) , e um manipulador de sinal válido para SIGIO deve ser instalado via sigaction(2). Veja a discussão de SINAIS abaixo.

OPÇÕES DE SOCKET

Estas opções de socket podem ser configuradas pelo uso de setsockopt(2) , e lidas com getsockopt(2) , com o nível de socket setado em SOL_SOCKET para todos os sockets:
SO_KEEPALIVE
Habilita o envio de mensagens "keep-alive" em sockets orientados à conexão. Espera por um integer boolean flag.
SO_OOBINLINE
Se esta opção é habilitada, dados out-of-band são colocados diretamente no fluxo de dados de recepção. Caso contrário, dados out-of-band são passados apenas quando o flag MSG_OOB é setado durante a recepção.
SO_RCVLOWAT e SO_SNDLOWAT
Especifica o número mínimo de bytes no buffer até que a camada de socket passe os dados para o protocolo (SO_SNDLOWAT) , ou para o usuário, ao receber um (SO_RCVLOWAT). Estes dois valores não são alteráveis em Linux, e o tamanho de seus argumentos são sempre fixados em 1 byte. getsockopt é capaz de lê-los; setsockopt sempre retornará ENOPROTOOPT.
SO_RCVTIMEO and SO_SNDTIMEO
Especifica os timeouts de envio ou recepção, até reportar um erro. Eles são fixados em uma configuração Linux específica para cada protocolo, e não pode ser lidos nem escritos. Suas funcionalidades podem ser emuladas usando-se alarm(2) ou setitimer(2).
SO_BSDCOMPAT
Habilita a compatibilidade BSD bug-a-bug. Isto é usado apenas no módulo do protocolo UDP e agendado para ser removido no futuro. Se habilitado erros de ICMP recebidos de um socket UDP não serão passados para o programa do usuário. O Linux 2.0 também habilita opções de compatibilidade BSD bug-a-bug (mudança aleatória de cabeçalhos, salto do sinalizador de broadcast) para sockets raw com estas opções, mas isso foi removido no Linux 2.2. É melhor corrigir os programas do usuário do que habilitar este sinalizador.
SO_PASSCRED
Habilita ou desabilita a recepção de mensagem de controle SCM_CREDENTIALS
.Para mais informações, veja unix(7).
SO_PEERCRED
Retorna as credenciais do processo estrangeiro conectado a este socket. É útil somente para sockets PF_UNIX ; veja unix(7). O argumento é uma estrutura ucred getsockopt.
SO_BINDTODEVICE
Liga este socket a um dispositivo particular, como \(lqeth0\(rq, como especificado no nome de interface passado. Se o nome é uma string vazia, ou se o comprimento da opção é zero, a ligação do dispositivo do socket é removido. A opção passada é uma string de nome de interface com comprimento variável e terminada em caractere nulo, com comprimento máximo de IFNAMSIZ. Se um socket é ligado a uma interface, somente os pacotes recebidos daquela interface particular serão processados pelo socket.
SO_DEBUG
Habilita o debugging do socket. Somente permitido para processos com a capabilidade CAP_NET_ADMIN ou com id efetivo de usuário igual a 0.
SO_REUSEADDR
Indica que as regras usadas nos endereços de validação fornecidos em uma chamada de bind(2) permitiriam reusar os endereços locais. Para sockets PF_INET isso significa que um socket pode ser ligado, exceto quando há um socket em escuta ativo ligado ao endereço. Quando o socket em escuta é ligado a INADDR_ANY com uma porta específica, então não é possível ligá-lo a esta porta para qualquer endereço local.
SO_TYPE
Obtém o tipo de socket como um inteiro (como SOCK_STREAM). Só pode ser lido com getsockopt.
SO_DONTROUTE
Não envia através de um gateway, somente envia a hosts conectados diretamente. O mesmo efeito pode ser atingido pela configuração do flag MSG_DONTROUTE sobre uma operação de socket send(2). Espera um flag booleano inteiro.
SO_BROADCAST
Seta ou obtém o flag de broadcast. Quando habilitado, os sockets de datagrama recebem pacotes enviados para um endereço de broadcast, e eles têm permissão para enviar pacotes a um endereço de broadcast. Esta opção não faz efeito em sockets orientados a streams.
SO_SNDBUF
Seta ou obtém o buffer máximo de envio de socket em bytes. O valor padrão é selecionado pelo sysctl wmem_default e o máximo valor permitido é selecionado pelo sysctl wmem_max
SO_RCVBUF
Seta ou obtém o máximo buffer de recepção de socket em bytes. O valor default é setado pelo sysctl rmem_default e o máximo valor permitido é setado pelo sysctl rmem_max
SO_LINGER
Seleciona ou obtém a opção SO_LINGER. O argumento é uma estrutura linger
struct linger {
    int   l_onoff;    /* linger ativo */
    int   l_linger;   /* quantos segundos para realizar linger */
};
Quando habilitado, um close(2) ou um shutdown(2) não retornarão até que todas as mensagens para o socket que estiverem enfileiradas tenham sido enviadas com sucesso, ou o timeout do linger tenha sido atingido. Caso contrário, a chamada retorna imediatamente e o fechamento ocorre em background. Quando o socket é encerrado como parte de exit(2) , ele sempre realiza o linger em background.
SO_PRIORITY
Seta a prioridade definida por protocolo para todos os pacotes a serem enviados sobre este socket. Os usuários de Linux usam este valor para ordenar as filas de rede: pacotes com uma prioridade maior podem ser processados primeiro, dependendo da disciplina de fila do dispositivo selecionado. Para ip(7) , isto também configura o campo IP "tipo-de-serviço (TOS)" para pacotes de saída.
SO_ERROR
Obtém e limpa erros de socket pendentes. Somente válido como um getsockopt. Espera um inteiro.

SINAIS

Quando se escreve para um socket orientado a conexão que foi derrubado (pela extremidade local ou pela remota), SIGPIPE é enviado para o processo de escrita e EPIPE é retornado. O sinal não é enviado quando a chamada de escrita especificou o sinalizador MSG_NOSIGNAL
Quando pedido com o fcntl FIOCSETOWN ou com o ioctl SIOCSPGRP , SIGIO é enviado quando ocorre um evento de I/O. É possível usar poll(2) ou select(2) em um manipulador de sinal para descobrir sobre qual socket o evento ocorreu. Uma alternativa (em Linux 2.2) é configurar um sinal de realtime usando o fnctl F_SETSIG ; o manipulador do sinal de tempo real será chamado com o descritor de arquivo no campo si_fd do seu siginfo_t. Veja fcntl(2) para mais informações.
Sob certas circunstâncias (por exemplo, múltiplos processos acessando um único socket), a condição que causou o SIGIO pode já ter desaparecido quando o processo reagir ao sinal. Se isso acontecer, o processo deveria esperar novamente porque o Linux reenviará o sinal mais tarde.

SYSCTLS

Os sysctls de núcleo para rede de sockets podem ser acessados usando-se os arquivos /proc/sys/net/core/* , ou com a interface sysctl(2)
rmem_default
contém a configuração padrão, em bytes, do buffer de recepção de sockets.
rmem_max
contém o tamanho máximo do buffer de recepção de sockets, em bytes, que um usuário pode selecionar pelo uso da opção de socket SO_RCVBUF
wmem_default
contém a configuração padrão, em bytes, do buffer de envio de sockets.
wmem_max
contém o tamanho máximo do buffer de recepção de sockets, em bytes, que um usuário pode setar pelo uso da opção de socket SO_SNDBUF
message_cost and message_burst
configuram o filtro bucket de token usado para carregar o limite de mensagens de atenção causadas por eventos externos à rede.
netdev_max_backlog
Número máximo de pacotes na fila global de entrada.
optmem_max
Comprimento máximo dos dados ancilares e dos dados de controle do usuário, como os iovecs por socket.

IOCTLS

Estes ioctls podem ser acessados usando-se ioctl(2):
error = ioctl(ip_socket, ioctl_type, &value_result);
SIOCGSTAMP
Retorna um struct timeval com o timestamp de recepção do último pacote passado ao usuário. Isto é útil para medidas precisas do tempo de "round trip". Veja setitimer(2) para uma descrição de struct timeval.
SIOCSPGRP
Seta o processo ou grupo de processos para os quais se enviam sinais SIGIO ou SIGURG quando uma operação de I/O assíncrona terminou, ou quando dados urgentes estão disponíveis. O argumento é um ponteiro para pid_t. Se o argumento é positivo, envia os sinais para aquele processo. Se o argumento é negativo, envia os sinais ao grupo de processos com o id de valor absoluto do argumento. O processo só pode escolher a si mesmo ou a seu próprio grupo de processos para receber sinais, a menos que ele tenha a capabilidade CAP_KILL ou um UID efetivo igual a 0.
FIOASYNC
Altera o flag O_ASYNC para habilitar ou desabilitar o modo de IO assíncrono do socket. Modo de IO assíncrono significa que o sinal SIGIO , ou os sinais setados com F_SETSIG é raised quando ocorre um novo evento de I/O.
O argumento é um sinalizador booleano inteiro.
SIOCGPGRP
Obtém o processo corrente ou grupo de processos que recebem sinais SIGIO ou SIGURG , ou 0 quando nenhum foi configurado.
fcntls válidos:
FIOCGETOWN
O mesmo que o ioctl SIOCGPGRP
FIOCSETOWN
O mesmo que o ioctl SIOCSPGRP

NOTAS

O Linux assume que metade do buffer de envio/recepção é usado para estruturas internas do kernel; portanto, os sysctls são o dobro do que podem ser observados no wire.

PROBLEMAS

As opções de socket CONFIG_FILTER , SO_ATTACH_FILTER e SO_DETACH_FILTER não são documentadas. A interface sugerida para usá-las é via biblioteca libpcap.

VERSÕES

SO_BINDTODEVICE foi introduzido no Linux 2.0.30. SO_PASSCRED é novo no Linux 2.2. Os sysctls são novos no Linux 2.2.

AUTORES

Esta página de manual foi escrita por Andi Kleen.

TRADUZIDO POR LDP-BR em 21/08/2000.

Rubens de Jesus Nogueira <> (tradução) André L. Fassone Canova <> (revisão)
⇧ Top