[Swan] struct sockaddr_in

D. Hugh Redelmeier hugh at mimosa.com
Thu Mar 7 06:42:41 EET 2013


On Fedora 17 (and probably lots of other Linux systems)

(1) ip(7) defines sruct sockaddr_in:

           struct sockaddr_in {
               sa_family_t    sin_family; /* address family: AF_INET */
               in_port_t      sin_port;   /* port in network byte order */
               struct in_addr sin_addr;   /* internet address */
           };

           /* Internet address. */
           struct in_addr {
               uint32_t       s_addr;     /* address in network byte order 
*/
           };

(2) when I get cc -E to show me struct sockaddr_in, I get something 
    different:

# 225 "/usr/include/netinet/in.h" 3 4
struct sockaddr_in
  {
    sa_family_t sin_family;
    in_port_t sin_port;
    struct in_addr sin_addr;


    unsigned char sin_zero[sizeof (struct sockaddr) -
      (sizeof (unsigned short int)) -
      sizeof (in_port_t) -
      sizeof (struct in_addr)];
  };
This version has padding so that sizeof(struct sockaddr) == sizeof(struct 
sockaddr_in).

I wonder why?  Is this a bug?

This confused me when I tried to understand pfkey messages generated by 
Pluto.


More information about the Swan mailing list