bind()函数接受一个指向sockaddr的指针,但是在我看到的所有示例中,都使用了sockaddr_in结构,并将其转换为sockaddr :
struct sockaddr_in name; ... if (bind (sock,(struct sockaddr *) &name,sizeof (name)) < 0) ...
为什么我使用的是sockaddr_in结构呢? 为什么不准备和通过sockaddr ?
这只是惯例吗?
我可以在Windows操作系统上使用本地套接字吗? – C ++ / Boost
linux套接字离开
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] 举报,一经查实,本站将立刻删除。