linux套接字地址
2014-04-22 08:16
281 查看
sockaddr_in(ipv4地址结构) sockaddr_in6(ipv6地址结构) sockaddr_un(unix域地址结构) sockaddr(通用地址结构,在connect、bind、accept、sendto、recvfrom、getsockname、getpeername 中使用,实际的地址结构都要转换为这一结构) sockaddr_storage(足够容纳任何地址类型的结构,广义上不知地址是什么类型时使用)
各个套接字地址结构及其定义所在文件如下:
#######################################
#############<bits/sockaddr.h> ::
#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family
#######################################
#############<netinet/in.h> ::
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
/* IPv6 address */
struct in6_addr
{
union
{
uint8_t
__u6_addr8[16];
#if defined __USE_MISC || defined __USE_GNU
uint16_t __u6_addr16[8];
uint32_t __u6_addr32[4];
#endif
} __in6_u;
#define s6_addr __in6_u.__u6_addr8
#if defined __USE_MISC || defined __USE_GNU
# define s6_addr16 __in6_u.__u6_addr16
# define s6_addr32 __in6_u.__u6_addr32
#endif
};
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
/* Ditto, for IPv6. */
struct sockaddr_in6
{
__SOCKADDR_COMMON (sin6_);
in_port_t sin6_port; /* Transport layer port # */
uint32_t sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* IPv6 scope-id */
};
#######################################
#############<sys/un.h> ::
/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket. */
struct sockaddr_un
{
__SOCKADDR_COMMON (sun_);
char sun_path[108]; /* Path name. */
};
/* Evaluate to actual length of the `sockaddr_un' structure. */
# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
+ strlen ((ptr)->sun_path))
#######################################
#############<bits/socket.h> ::
/* Structure describing a generic socket address. */
struct sockaddr
{
__SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
char sa_data[14]; /* Address data. */
};
/* Structure large enough to hold any socket address (with the historical
exception of AF_UNIX). We reserve 128 bytes. */
#define __ss_aligntype unsigned long int
#define _SS_SIZE 128
#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
__ss_aligntype __ss_align; /* Force desired alignment. */
char __ss_padding[_SS_PADSIZE];
};
各个套接字地址结构及其定义所在文件如下:
#######################################
#############<bits/sockaddr.h> ::
#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family
#######################################
#############<netinet/in.h> ::
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
/* IPv6 address */
struct in6_addr
{
union
{
uint8_t
__u6_addr8[16];
#if defined __USE_MISC || defined __USE_GNU
uint16_t __u6_addr16[8];
uint32_t __u6_addr32[4];
#endif
} __in6_u;
#define s6_addr __in6_u.__u6_addr8
#if defined __USE_MISC || defined __USE_GNU
# define s6_addr16 __in6_u.__u6_addr16
# define s6_addr32 __in6_u.__u6_addr32
#endif
};
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
/* Ditto, for IPv6. */
struct sockaddr_in6
{
__SOCKADDR_COMMON (sin6_);
in_port_t sin6_port; /* Transport layer port # */
uint32_t sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* IPv6 scope-id */
};
#######################################
#############<sys/un.h> ::
/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket. */
struct sockaddr_un
{
__SOCKADDR_COMMON (sun_);
char sun_path[108]; /* Path name. */
};
/* Evaluate to actual length of the `sockaddr_un' structure. */
# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
+ strlen ((ptr)->sun_path))
#######################################
#############<bits/socket.h> ::
/* Structure describing a generic socket address. */
struct sockaddr
{
__SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
char sa_data[14]; /* Address data. */
};
/* Structure large enough to hold any socket address (with the historical
exception of AF_UNIX). We reserve 128 bytes. */
#define __ss_aligntype unsigned long int
#define _SS_SIZE 128
#define _SS_PADSIZE (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
__ss_aligntype __ss_align; /* Force desired alignment. */
char __ss_padding[_SS_PADSIZE];
};
相关文章推荐
- MAC地址
- Devexpress 10.1.6 源代码重新编译成功(DXperience 10.1.6 重新编译)附所有需要用到的资源下载地址 (收藏)
- 使用curl将外网地址发到指定的邮箱
- 双语不用教 下载地址!!!
- 如何增加一个通讯录信息,信息包括姓名,地址和电话
- iOS 判断一个NSURL是本地还是远程地址
- CentOS 7.0本地yum源地址及 配置yum地址优先级
- 使用极酷阳光播放器做流媒体播放并不暴露视频地址
- 查看本地起工程部署war包的地址位置
- 利用struts框架实现URL地址映射配置的关键点
- 根据Ip地址 获取 mac地址
- DMA分配内存,能用那些函数,那些不能用?why? 因为 DMA物理地址要连续
- cygwin完整版下载地址
- ORACLE 10gR2的软件下载地址
- 武汉大学GNSS中心给IGS提供的数据产品下载地址
- java项目——URLRewrite实现url地址伪静态化
- weblogic查看访问工程地址
- 地址映射
- 《ASP.NET 2.0 揭密》资源下载地址 和《道不远人》资源下载地址
- Jim's游戏外挂学习笔记4—查找怪数据数组的内存分布和地址