sockaddr_in

来源:互联网 发布:知乎注册必须手机号 编辑:IT博客网 时间:2019/09/17 15:08

 
 
某个群中看到了一个问题。
"sockaddr_in和SOCKADDR_IN有什么区别  我看他们的数据结构都一样的 为什么要分呢"

"(sockaddr*)&svrAddr这个是什么写法  为什么要加括号"

 

第一个问题 “ms 十分渴望有自己的数据形式呗” (Just for fun!)
第二个问题。 是关于协议族的。


socket(套接字)源于伯克利, 支持丰富的协议族。 IP protocol family ,Amateur Radio Novell Internet Protocol。。。。 每个协议族都有其地址描述。  sockaddr为通用型地址

struct sockaddr {
    unsigned short sa_family;
    char           sa_data[14];
};


由于条件的限制大都数人经常接触的是 IP协议族。 sockaddr_in为IP族的地址。也就是把sa_data[14] 写成IP族特定的形式。

struct sockaddr_in{
    short            sin_family;
    unsigned short      sin_port;
    struct   in_addr      sin_addr;
    char               sin_zero[8];
};

struct   in_addr {
    union   {
         struct{
             unsigned  char   s_b1,
                              s_b2,
                              s_b3,
                              s_b4;
        }  S_un_b;
             struct  {
             unsigned  short  s_w1,
                              s_w2;
              }  S_un_w;
               unsigned long  S_addr;
     } S_un;
};


(sockaddr*)&svrAddr 是地址形式的转化, 因为套接字各种接口传递地址是统一的sockaddr。
至于SOCKADDR_IN 之流 , 是ms对伯克利的typedef。

 

就写这些了。 不然错误又要一大堆了。 想再说上几句。 国人写的书向来不负责任, 就像上面的问题那样, 用用这个用用那个, 代码一帖完事,让读者莫名其妙。 网上的文章不可尽信,断章取义居多。 

 

over。