微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在调用bind时将sockaddr_in转换为sockaddr?

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

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

为什么我使用的是sockaddr_in结构呢? 为什么不准备和通过sockaddr ?

这只是惯例吗?

我可以在Windows操作系统上使用本地套接字吗? – C ++ / Boost

在Windows中获取TCP套接统计信息

linux套接字离开

C代码获取Linux中IP地址的接口名称

gethostbyname()或getnameinfo()如何在后台工作?

对于客户端服务器程序,并行接收多个客户端连接请求的最佳方法是什么?

TCP堆栈是否在现有连接上发送未经请求的RST?

从Windows上的套接字连续读取失败(haskell套接字)

RAIIsockets:什么时候释放(closures)

绑定INADDR_ANY

不,这不只是惯例。

sockaddr是任何类型套接字操作的通用描述符,而sockaddr_in是基于IP通信的特定结构(IIRC,“in”代表“InterNet”)。 据我所知,这是一种“多态性”: bind()函数伪装成一个struct sockaddr * ,但事实上,它将假设传入适当类型的结构; 即一个对应于你给它作为第一个参数的套接字的类型。

这是因为绑定可以绑定除IP套接字之外的其他类型的套接字,例如Unix域套接字(sockaddr_un作为其类型)。 AF_INET套接字的地址具有主机和端口作为其地址,而AF_UNIX套接字具有文件系统路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐