【发布时间】:2015-08-28 14:37:36
【问题描述】:
任何人都可以帮助我在套接字编程中跟踪bind() 系统调用。我想知道在内核空间中调用bind() 时会发生什么。比如它更新了哪些结构,底层调用了哪些函数
【问题讨论】:
-
不要追踪。查看来源。
标签: c linux sockets networking
任何人都可以帮助我在套接字编程中跟踪bind() 系统调用。我想知道在内核空间中调用bind() 时会发生什么。比如它更新了哪些结构,底层调用了哪些函数
【问题讨论】:
标签: c linux sockets networking
bind(2) 系统调用仅配置本地端的地址参数,一旦您连接(或sendto(2)),套接字将使用这些参数。如果你不使用它,内核会根据底层协议为其选择默认值。
bind(2) 遵循的确切过程取决于您正在处理的协议系列,因为如果您使用的是 PF_UNIX、PF_INET、PF_PACKET、PF_XNS 等,绑定的行为会有所不同。
例如,在 Unix 套接字中,您会将套接字关联到文件系统中的一个 inode(当然,这是一个支持 unix 套接字的 inode),因此客户端有一个连接路径(在 Unix 套接字中,地址是文件系统中的路径)。在 TCP/IP 套接字中,您可以固定本地 IP 地址或您的套接字可以侦听的本地 IP 端口(以接受连接),或者您可以强制 IP 地址和/或端口连接到服务器。
为了更深入地了解网络套接字的内部结构,我建议您阅读 W.R. Stevens 的优秀书籍“TCP/IP Illustrated Vol 2. The implementation”, 描述了 BSD 套接字在 NET2 中的实现。它很旧,但仍然是有史以来最好的解释。为了很好地介绍 BSD 套接字系统调用的使用,还有一本 W.R.Stevens 的优秀书籍(长期以来它确实也是 BSD unix 系统调用的最佳系统调用参考):"UNIX 网络编程,卷1(第 2 版):套接字 API。” 两者都是每个人在工作中都应该拥有的两件珍宝。
【讨论】: