UNP 학습 노트(1) - Sockets Introduction: Socket Address Structure

2714 단어 socket
  • 1、IPv4 Socket Address Structure
  • struct in_addr {
    
      in_addr_t   s_addr;           /* 32-bit IPv4 address */
    
                                    /* network byte ordered */
    
    };
    
    
    
    struct sockaddr_in {
    
      uint8_t         sin_len;      /* length of structure (16) */
    
      sa_family_t     sin_family;   /* AF_INET */
    
      in_port_t       sin_port;     /* 16-bit TCP or UDP port number */
    
                                    /* network byte ordered */
    
      struct in_addr  sin_addr;     /* 32-bit IPv4 address */
    
                                    /* network byte ordered */
    
      char            sin_zero[8];  /* unused */
    
    };
    <netinet/in.h>
    2、Generic Socket Address Structure
    struct sockaddr {
    
      uint8_t      sa_len;
    
      sa_family_t  sa_family;    /* address family: AF_xxx value */
    
      char         sa_data[14];  /* protocol-specific address */
    
    };

    정의:
    이 구조는 통용되고 ANSI C에 부합되기 때문에 socket 함수는 모두 이 구조를 매개 변수로 전달한다.예를 들면 다음과 같습니다.
  • int bind(int, struct sockaddr *, socklen_t);

  • 4
  • 그러므로 IPv4 Socket Address Structure를 사용할 때 다음과 같은 변환이 발생합니다. 4
  • struct sockaddr_in  serv;      /* IPv4 socket address structure */
    
    
    
    /* fill in serv{} */
    
    
    
    bind(sockfd, (struct sockaddr *) &serv, sizeof(serv));

    3、IPv6 Socket Address Structure
  • struct in6_addr {
    
      uint8_t  s6_addr[16];          /* 128-bit IPv6 address */
    
                                     /* network byte ordered */
    
    };
    
    
    
    #define SIN6_LEN      /* required for compile-time tests */
    
    
    
    struct sockaddr_in6 {
    
      uint8_t         sin6_len;      /* length of this struct (28) */
    
      sa_family_t     sin6_family;   /* AF_INET6 */
    
      in_port_t       sin6_port;     /* transport layer port# */
    
                                     /* network byte ordered */
    
      uint32_t        sin6_flowinfo; /* flow information, undefined */
    
      struct in6_addr sin6_addr;     /* IPv6 address */
    
                                     /* network byte ordered */
    
      uint32_t        sin6_scope_id; /* set of interfaces for a scope */
    
    };
    
    4、New Generic Socket Address Structure
    struct sockaddr_storage {
    
      uint8_t      ss_len;       /* length of this struct (implementation dependent) */
    
      sa_family_t  ss_family;    /* address family: AF_xxx value */
    
      /* implementation-dependent elements to provide:
    
       * a) alignment sufficient to fulfill the alignment requirements of
    
       *    all socket address types that the system supports.
    
       * b) enough storage to hold any type of socket address that the
    
       *    system supports.
    
       */
    
    };

    좋은 웹페이지 즐겨찾기