Unix Sockets 简明教程
Unix Socket - Structures
Unix 套接字编程中使用各种结构来保存有关地址和端口等信息的的信息。大多数套接字函数需要一个指向套接字地址结构的指针作为参数。本章定义的结构与 Internet 协议族相关。
sockaddr
第一个结构是 sockaddr,它保存套接字信息——
struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};
这是一个通用的套接字地址结构,它将在大多数套接字函数调用中传递。下表提供了成员字段的说明——
Attribute |
Values |
Description |
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它表示地址族。在大多数基于 Internet 的应用程序中,我们使用 AF_INET。 |
sa_data |
Protocol-specific Address |
根据地址的类型解释协议特定地址的 14 个字节的内容。对于 Internet 族,我们将使用端口号 IP 地址,它由下面定义的 sockaddr_in 结构表示。 |
sockaddr in
帮助你引用套接字元素的第二个结构如下所示 −
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
下面是成员字段的说明 −
Attribute |
Values |
Description |
sa_family |
AF_INET AF_UNIX AF_NS AF_IMPLINK |
它表示地址族。在大多数基于 Internet 的应用程序中,我们使用 AF_INET。 |
sin_port |
Service Port |
以网络字节顺序排列的 16 位端口号。 |
sin_addr |
IP Address |
以网络字节顺序排列的 32 位 IP 地址。 |
sin_zero |
Not Used |
你只需将该值设置为 NULL,因为未使用。 |
in addr
此结构仅用作以上结构中的结构字段,并保存 32 位网络 ID/主机 ID。
struct in_addr {
unsigned long s_addr;
};
下面是成员字段的说明 −
Attribute |
Values |
Description |
s_addr |
service port |
以网络字节顺序排列的 32 位 IP 地址。 |
hostent
此结构用于保存与主机相关的的信息。
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]
};
下面是成员字段的说明 −
Attribute |
Values |
Description |
h_name |
ti.com etc. |
这是主机的官方名称。例如,tutorialspoint.com、google.com 等。 |
h_aliases |
TI |
保存主机名称别名列表。 |
h_addrtype |
AF_INET |
包含地址族,在基于因特网的应用程序中,它将始终为 AF_INET。 |
h_length |
4 |
保存 IP 地址的长度,因特网地址为 4。 |
h_addr_list |
in_addr |
对于因特网地址,h_addr_list[0]、h_addr_list[1] 等指针数组指向 in_addr 结构。 |
NOTE − 为保持向后兼容性,h_addr 定义为 h_addr_list[0]。
servent
此特定结构用于保存与服务和相关端口有关的信息。
struct servent {
char *s_name;
char **s_aliases;
int s_port;
char *s_proto;
};
下面是成员字段的说明 −
Attribute |
Values |
Description |
s_name |
http |
这是服务的官方名称。例如,SMTP、FTP POP3 等。 |
s_aliases |
ALIAS |
保存服务别名列表。大多数情况下此内容将设置为 NULL。 |
s_port |
80 |
将有相关端口号。例如,对于 HTTP,此端口号为 80。 |
s_proto |
TCP UDP |
它设置为使用的协议。互联网服务通过 TCP 或 UDP 提供。 |