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.