Unix套接字地址结构


#include <netinet/in.h>

/**IPV4套接字地址结构**/
struct in_addr
{
	in_addr s_addr;//32位IPV4地址,这是无符号整数,网络字节序
};

/*POSIX只关注sin_family,sin_port,sin_addr,所有网络套接字地质结构都至少16字节*/
struct sockaddr_in
{
	uint8_t sin_len;//无符号八位整形,套接字地址长度(16字节)
	sa_family_t sin_family;//unsigned short
	in_port_t sin_port;//16位TCP、UDP端口号,网络字节序
	struct in_addr sin_addr;//32位IPV4地址,这是个结构,网络字节序
	char sin_zero[8];//未使用
};

#include <sys/socket.h>
/***通用套接字地址结构***/
struct sockaddr
{
	uint8_t sa_len;
	sa_family_t sa_family;//地址族,AF_XXX
	char sa_data[14];//与协议相关的地址
};


#include <netinet/in.h>
/***IPV6套接字地址结构****/
struct in6_addr
{
	uint8 s6_addr[16];//128位IPV6地址,整数,网络字节序
};

#define SIN6_LEN//支持sin6_len的地址必须定义
struct sockaddr_in6
{
	uint8_t sin6_len;//套接字地址长度(28字节)
	sa_family_t sa6_family;//AF_INET6
	in_port_t sin6_port;//端口

	uint32 sin6_flowinfo;//流标,未定义
	struct in6_addr sin6_addr;//IPV6地址,结构体

	uint32_t sin6_scope_id//?;
};

/***新的通用套接字地址结构***/
struct sockaddr_storage
{
	uint8_t ss_len;//本结构体的长度
	sa_family_t ss_family;//地址族,AF_XXX
	//可能还有其他字段
};

/**Unix域套接字结构**/
#include <sys/un.h>
struct sockaddr_un
{
	sa_family_t sun_family;/*AF_LOCAL*/
	char sun_path[104];//路径名字符串
};

/***数据链路套接字地址***/
#include <net/if_dl.h>//interface
struct sockaddr_dl
{
	uint8_t sdl_len;
	sa_family_t sdl_family;//AF_LINK
	uint16_t sdl_index;//>0,????
	uint8_t sdl_type;//IFT_ETHER,ect.????
	uint8_t sdl_nlen;//接口名称长度
	uint8_t sdl_alen;//链路层地址长度
	uint8_t sdl_slen;//链路层selector长度。??
	char sdl_data[12];//接口名字(从sdl_data[0]开始)和链路层地址(从sdl_data[sdl_nlen]开始)
};

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值