59

私の疑問は、UNIX のソケットの次の構造に関連しています。

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET, AF_INET6
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};

ここで、メンバーsin_addrのタイプはstruct in_addrです。

しかし、すべてがそうであるように、誰かがそれをしたい理由がわかりませんstruct inaddr:

struct in_addr {
    unsigned long s_addr;          // load with inet_pton()
};

All in_addrhas is just one member s_addr. なぜ私たちはこのようなものを持つことができないのですか:

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET, AF_INET6
    unsigned short   sin_port;     // e.g. htons(3490)
    unsigned long    s_addr ; 
    char             sin_zero[8];  // zero this if you want to
};
4

3 に答える 3

32

struct in_addr使用しているシステムによっては、それとは大きく異なる場合があります。たとえば、 Windowsの場合:

typedef struct in_addr {
  union {
    struct {
      u_char s_b1,s_b2,s_b3,s_b4;
    } S_un_b;
    struct {
      u_short s_w1,s_w2;
    } S_un_w;
    u_long S_addr;
  } S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

唯一の要件は、メンバーが含まれていることですs_addr

于 2012-12-20T19:31:15.610 に答える
8

in_addr構造体には複数のメンバーが含まれている可能性があるためです。

http://pubs.opengroup.org/onlinepubs/009604599/basedefs/netinet/in.h.html

于 2012-12-20T19:31:04.140 に答える