socket结构

有各种不同的Unix套接字编程结构,用来保存地址和端口信息和其他信息。大多数socket函数需要一个指向一个socket地址结构作为参数。如下定义的结构与互联网协议的家族。

第一个结构是struct sockaddr的特有套接字信息:

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

这是一个通用的套接字地址结构在大部分的套接字函数调用,将被传递。这里是成员字段的描述:

属性 描述
sa_family AF_INET
AF_UNIX
AF_NS
AF_IMPLINK
这是一个地址族。在大多数基于互联网的应用当中,我们使用af_inet。
sa_data Protocol Specific Address 根据地址的类型解释14字节的协议特定地址的内容。互联网的家庭族中我们将使用端口号的IP地址为bysockaddr_in结构定义如下。

第二个结构,帮助引用套接字的元素如下:

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

这里是成员字段的描述:

属性 描述
sa_family AF_INET
AF_UNIX
AF_NS
AF_IMPLINK
这是一个地址族。在大多数基于互联网的应用当中,我们使用af_inet。
sin_port Service Port 网络字节序的一个16位端口号。
sin_addr IP Address 网络字节序的一个32位地址。
sin_zero Not Used 设定为NULL(不被使用)

下一个结构仅用于上述结构中的一个结构域,并拥有32位的netid/主机ID。

struct in_addr {
	unsigned long s_addr;
};

这里是成员字段的描述:

属性 描述
s_addr service port 网络字节序的一个32位地址。

还有一个更重要的结构。这个结构是用来保持主机相关的信息。

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]
};

这里是成员字段的描述:

属性 描述
h_name ti.com etc 主机的官方名称。例如tutorialspoint.com,Google.com等。
h_aliases TI 列出主机别名。
h_addrtype AF_INET 基于互联网的包含地址和家庭族协议的应用程序,它将永远为af_inet
h_length 4 保持4字节的互联网地址的地址长度。
h_addr_list in_addr 互联网地址的指针h_addr_list [ 0 ]数组,h_addr_list [ 1 ]等都指向结构in_addr。

注: h_addr被定义为h_addr_list[0],以保持向后兼容。.

下面的结构是用来保持服务和相关联的端口有关的信息。

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

这里是成员字段的描述:

属性 描述
s_name http 这是官方的服务名称。例如SMTP,FTP POP3等。
s_aliases ALIAS 其将存放服务别名的列表。大部分的时间将被设置为NULL。
s_port 80 这将有相关联的端口号。例如HTTP,则为80。
s_proto TCP 
UDP
这将被设置为所使用的协议。使用TCP或UDP网络服务。

套接字结构上的提示:

套接字地址结构是每一个网络程序的一个组成部分。我们分配填补在指针传递给它们的各种套接字函数。有时候,我们通过一个这样的结构指针的socket函数,它填补了内容。

我们总是通过引用传递这些结构(即我们传递一个指针的结构,而不是结构本身),我们总是通过结构的大小作为另一个参数。

当套接字函数填充在一个结构中,长度也通过引用传递的,因此它的值由该函数可以被更新。我们称这些结果值参数。

请务必将结构体变量设置为NULL(即'\0')用memset()的bzero()函数,否则在你的结构,它可能会得到意想不到的垃圾值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Swxctx

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值