某个群中看到了一个问题。
"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。