关于sockaddr和sockaddr_in的一点疑问,sin_zero[8]的这8个字节留来何用??

thor_lee 2009-08-09 02:26:08
sockaddr的结构是:
struct sockaddr {
  unsigned short sa_family; /* address family, AF_xxx ,2字节*/
  char sa_data[14]; /* 14 bytes of protocol address ,14字节*/
  };//共16字节

sockaddr_in的结构是:
struct sockaddr_in {
  short int sin_family; /* Address family ,2字节*/
  unsigned short int sin_port; /* Port number , 2字节*/
  struct in_addr sin_addr; /* Internet address ,4字节*/
  unsigned char sin_zero[8]; /* Same size as struct sockaddr ,8字节,*/
  };//共16字节

两者等价,但我们主要使用的是sockaddr_in,其中的sin_family,sin_port,sin_addr的意义很明显,唯独后面的8个空字节,留来何用???不解,特来请教~~~~高手们来讲讲~~~
...全文
389 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AForeverNoob 2011-11-08
这个是unix里的吧。
回复
goofychan 2010-07-12
最近也在查这2个函数,云里雾里啊~
回复
thor_lee 2009-08-09
看来又是个没有结果的问题……

不过好像跟微软没什么关系把,这个标准又不是微软定义的…………
回复
MoXiaoRab 2009-08-09
这个问题我以前回答过,这个做保留用,一般没用到

微软的很多数据结构中都会放置一个或多个保留的域,没什么奇怪的。
也许是为了将来的革新兼容性做好放着先
回复
雪影 2009-08-09
这个问题你的去问微软。
回复
thor_lee 2009-08-09
[Quote=引用 1 楼 jennyvenus 的回复:]
别人都说用来保证两个结构体的size一致用的。

[/Quote]

这个我知道啊,我的意思是两个结构体都可以弄成8字节的形式,即

struct sockaddr {
  unsigned short sa_family; /* address family, AF_xxx ,2字节*/
  char sa_data[6]; /* 14 bytes of protocol address ,14字节*/
  };//共8字节

struct sockaddr_in {
  short int sin_family; /* Address family ,2字节*/
  unsigned short int sin_port; /* Port number , 2字节*/
  struct in_addr sin_addr; /* Internet address ,4字节*/
  };//共8字节

这样的话并没有影响到sin_family,sin_port,sin_addr的使用,干嘛非得多弄8个字节出来,这不是浪费嘛~~ 除非有别的什么作用!!!!
回复
雪影 2009-08-09
[Quote=引用 1 楼 jennyvenus 的回复:]
别人都说用来保证两个结构体的size一致用的。

[/Quote]
up

查看msdn的说明就知道了
sin_zero
Padding to make structure the same size as SOCKADDR.
回复
绿豆蛙2013 2009-08-09
http://blog.csdn.net/believe_me/archive/2006/06/12/790772.aspx
回复
thor_lee 2009-08-09
是可以保证两个结构体是size一致,但是把两个结构体里面都减小8字节也是一致的啊,为什么非得用现在这种方法呢????
回复
别人都说用来保证两个结构体的size一致用的。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告