您的位置:首页 > 运维架构 > Linux

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];
  };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sockaddr sockaddr_in