linux套接字地址

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

  };


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值