bind()函数接受指向sockaddr的指针,但在我看到的所有示例中,都使用了sockaddr_in struct ,并将其强制转换为sockaddr:

struct sockaddr_in name;
...
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
...

我不明白为什么要用sockaddr_in struct .为什么不准备通过sockaddr考试呢?

这只是惯例吗?

推荐答案

不,这不仅仅是惯例.

sockaddr是任何类型套接字操作的通用描述符,而sockaddr_in是特定于基于IP的通信(IIRC,"in"代表"InterNet")的 struct .据我所知,这是一种"多态性":bind()函数假装接受struct sockaddr *,但实际上,它会假定传入了适当类型的 struct ;i、 e.与作为第一个参数给出的套接字类型相对应的套接字.

C++相关问答推荐

如何在Scilab API中求解方程

FFmpeg不检测比特流过滤器参数

有关字符数组指针和次指针以及qsort函数中的cmp函数的问题

如何用C(使用两个s补数算术的32位程序)计算

在32位处理器上优化53—32位模计算>

如何使用Python C API实现多线程程序?

GCC预处理宏和#杂注GCC展开

特定闪存扇区的内存别名

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

Linux不想运行编译后的文件

致命错误:ASM/rwan ce.h:没有这样的文件或目录.符号链接还不够

按长度对argv中的单词进行排序

这个空指针类型的转换是有效代码还是恶意代码?

向左移位3如何得到以字节为单位的位数?

带有数组指针的 struct 在print_stack()函数中打印随机数

为什么argc和argv即使在主函数之外也能工作?

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

如何在Rust中处理C的longjmp情况?

是什么阻止编译器优化手写的 memcmp()?

OpenGL 中的非渐变 colored颜色 变化