Soquete Unix - Estruturas

Várias estruturas são usadas na programação de soquete Unix para conter informações sobre o endereço e a porta, e outras informações. A maioria das funções de soquete requerem um ponteiro para uma estrutura de endereço de soquete como argumento. As estruturas definidas neste capítulo estão relacionadas à família de protocolos da Internet.

sockaddr

A primeira estrutura é o sockaddr que contém as informações do soquete -

struct sockaddr {
   unsigned short   sa_family;
   char             sa_data[14];
};

Esta é uma estrutura de endereço de soquete genérica, que será passada na maioria das chamadas de função de soquete. A tabela a seguir fornece uma descrição dos campos do membro -

Atributo Valores Descrição
sa_family

AF_INET

AF_UNIX

AF_NS

AF_IMPLINK

Ele representa uma família de endereços. Na maioria dos aplicativos baseados na Internet, usamos AF_INET.
sa_data Endereço específico do protocolo O conteúdo dos 14 bytes do endereço específico do protocolo é interpretado de acordo com o tipo de endereço. Para a família da Internet, usaremos o endereço IP do número da porta, que é representado pela estrutura sockaddr_in definida abaixo.

sockaddr em

A segunda estrutura que ajuda você a fazer referência aos elementos do soquete é a seguinte -

struct sockaddr_in {
   short int            sin_family;
   unsigned short int   sin_port;
   struct in_addr       sin_addr;
   unsigned char        sin_zero[8];
};

Aqui está a descrição dos campos de membro -

Atributo Valores Descrição
sa_family

AF_INET

AF_UNIX

AF_NS

AF_IMPLINK

Ele representa uma família de endereços. Na maioria dos aplicativos baseados na Internet, usamos AF_INET.
sin_port Porta de serviço Um número de porta de 16 bits em Network Byte Order.
sin_addr Endereço de IP Um endereço IP de 32 bits na ordem de bytes da rede.
sin_zero Não usado Você acabou de definir esse valor como NULL, pois ele não está sendo usado.

em addr

Esta estrutura é usada apenas na estrutura acima como um campo de estrutura e contém netid / hostid de 32 bits.

struct in_addr {
   unsigned long s_addr;
};

Aqui está a descrição dos campos de membro -

Atributo Valores Descrição
s_addr porta de serviço Um endereço IP de 32 bits na ordem de bytes da rede.

hostente

Essa estrutura é usada para manter as informações relacionadas ao host.

struct hostent {
   char *h_name; 
   char **h_aliases; 
   int h_addrtype;  
   int h_length;    
   char **h_addr_list
	
#define h_addr  h_addr_list[0]
};

Aqui está a descrição dos campos de membro -

Atributo Valores Descrição
h_name ti.com etc. É o nome oficial do host. Por exemplo, tutorialspoint.com, google.com, etc.
h_aliases TI Ele contém uma lista de aliases de nomes de host.
h_addrtype AF_INET Ele contém a família de endereços e, no caso de aplicação baseada na Internet, será sempre AF_INET.
comprimento_h 4 Ele contém o comprimento do endereço IP, que é 4 para o endereço da Internet.
h_addr_list in_addr Para endereços da Internet, a matriz de ponteiros h_addr_list [0], h_addr_list [1] e assim por diante, são pontos para a estrutura in_addr.

NOTE - h_addr é definido como h_addr_list [0] para manter a compatibilidade com versões anteriores.

servo

Essa estrutura específica é usada para manter informações relacionadas ao serviço e às portas associadas.

struct servent {
   char  *s_name; 
   char  **s_aliases; 
   int   s_port;  
   char  *s_proto;
};

Aqui está a descrição dos campos de membro -

Atributo Valores Descrição
s_name http Este é o nome oficial do serviço. Por exemplo, SMTP, FTP POP3, etc.
s_aliases ALIAS Ele contém a lista de aliases de serviço. Na maioria das vezes, será definido como NULL.
esporte 80 Ele terá um número de porta associado. Por exemplo, para HTTP, será 80.
s_proto

TCP

UDP

É definido para o protocolo usado. Os serviços de Internet são fornecidos usando TCP ou UDP.

Dicas sobre estruturas de soquete

As estruturas de endereço de soquete são parte integrante de todo programa de rede. Nós os alocamos, preenchemos e passamos ponteiros a eles para várias funções de socket. Às vezes, passamos um ponteiro para uma dessas estruturas para uma função de soquete e ele preenche o conteúdo.

Sempre passamos essas estruturas por referência (ou seja, passamos um ponteiro para a estrutura, não a própria estrutura) e sempre passamos o tamanho da estrutura como outro argumento.

Quando uma função de socket preenche uma estrutura, o comprimento também é passado por referência, para que seu valor possa ser atualizado pela função. Chamamos esses argumentos de valor-resultado.

Sempre, defina as variáveis ​​de estrutura para NULL (ou seja, '\ 0') usando memset () para funções bzero (), caso contrário, pode obter valores indesejados de lixo em sua estrutura.