为什么必须在套接字函数中传递sizeof?

ant*_*ric 3 c sockets

我期待到用C socket编程,我很好奇,为什么你要传递一个参数,并在样功能的该参数的长度bind()connect()?为什么不在sizeof()函数内部使用?

unw*_*ind 6

因为它提供了一种简单的方法来处理具有相同API的许多不同类型的协议.

由于套接字可以使用许多不同的底层协议(如@larsman所指出的),因此调用无法准确地知道它正在传递给哪种类型的结构.struct sockaddr各种类型都有一些基本的"继承" .

此外,它提供了一些前向兼容性; 对于一个版本的库编译的二进制文件可能是针对更高版本运行的,其中地址类型可能已经增长(例如支持IPv6).

通过将调用者对大小想法传递给被调用函数,被调用函数可以注意不要覆盖内存.

  • 这不是向后兼容性.这是因为套接字API通过设计满足不同大小的地址结构; 在第一个版本中,它已经使用一组函数支持IPv4和UNIX域套接字(`sockaddr_in`和`sockaddr_un`).XNS很快就加入了. (3认同)