Doc Socket
#include int socket(int domain, int type, int protocol);
Função que retorna um descritor de arquivo do socket criado.
O parâmetro int domain está relacionado ao escopo de atuação do socket, podendo ser de dois tipos Local ou Rede:
Alguns exemplos de parâmetros domain:
Local:
AF_LOCAL
Rede:
AF_INET - Pilha TCP/IP versao 4
AF_INET6 - Pilha TCP/IP versao 6
AF_X25 - Protocolo X.25 de rádio amador
AF_IPX - Protocolo IPX/SPX da Novell
AF_NETBEUI - Netbeui da IBM
AF_APPLETALK - AppleTalk da Apple
O parâmetro int type define a maneira de acesso as famílias ou pilhas de protocolo, de forma a não definir o protocolo diretamente mas por estabelecer quais os recursos serão utilizados pelo socket, que podem ser:
Sequenciamento: Os dados serão recebidos na mesma ordem que foram enviados.
Retransmissão: Caso algum dado seja perdido haverá retransmissão, ou seja, não há perda de dados.
Orientado a conexão: Antes do tráfego dos dados, uma conexão é estabelecida.
Não orientado a conexão: Não há estabelecimento de conexão.
Lista com os principais tipos de sockets e os recursos suportados:
SOCK_STREAM: sequenciamento, retransmissão e orientação a conexão.
SOCK_DGRAM: não orientado a conexão, não possui retransmissão, utiliza datagramas de tamanho máximo fixo.
SOCK_SEQPACKET: sequenciamento, confiabilidade, orientação a conexão, utiliza datagrama de tamanho máximo fixo.
SOCK_RAW: Provê acesso direto aos protocolos.
SOCK_RDM: Provê uma camada confiável para trafegar datagramas, mas não garante sequenciamento.
O parâmetro protocol define o protocolo que será utilizado pelo socket, todavia a escolha de domain e type já é suficiente para que o kernel defina o protocolo, para isso deve-se passar 0 como parâmetro, a seguir alguns protocolos:
IPPROTO_ICMP = 1 Internet Control Message Protocol
IPPROTO_IGMP = 2 Internet Group Management Protocol
IPPROTO_IPIP = 4 IPIP tunnels
IPPROTO_TCP = 6 Transmission