C bind如何在内核空间内部工作?

C bind如何在内核空间内部工作?,c,linux,sockets,networking,C,Linux,Sockets,Networking,有人能帮我跟踪socket编程中的系统调用吗。我想知道在内核空间中调用bind()时会发生什么。像它更新的结构和在较低级别调用的函数一样,bind(2)系统调用只配置本地端的地址参数,套接字在连接后将使用这些参数(或sendto(2))。如果不使用它,内核将根据底层协议为其选择默认值 下面的确切过程取决于您使用的协议系列,因为如果您使用的是PF\u UNIX、PF\u INET、PF\u PACKET、PF\u XNS等,bind的行为会有所不同 例如,在Unix套接字中,您将使套接字与文件系统

有人能帮我跟踪socket编程中的系统调用吗。我想知道在内核空间中调用
bind()
时会发生什么。像它更新的结构和在较低级别调用的函数一样,
bind(2)
系统调用只配置本地端的地址参数,套接字在连接后将使用这些参数(或
sendto(2)
)。如果不使用它,内核将根据底层协议为其选择默认值

下面的确切过程取决于您使用的协议系列,因为如果您使用的是
PF\u UNIX
PF\u INET
PF\u PACKET
PF\u XNS
等,bind的行为会有所不同

例如,在Unix套接字中,您将使套接字与文件系统中的一个inode相关联(当然是一个支持Unix套接字的inode),因此客户端有一个要连接的路径(在Unix套接字中,地址是文件系统中的路径)。在TCP/IP套接字中,您可以修复套接字可以侦听的本地IP地址或本地IP端口(以接受连接),也可以强制IP地址和/或端口从服务器连接到服务器


为了更深入地理解网络套接字的内部结构,我建议您阅读W.R.Stevens的优秀著作《TCP/IP图解第2卷实现》,该书描述了BSD套接字在NET2中的实现。这很古老,但仍然是有史以来最好的解释。为了更好地介绍BSD套接字系统调用的使用,W.R.Stevens还出版了一本优秀的书(很长一段时间以来,它确实也是BSD unix系统调用的最佳系统调用参考资料):“unix网络编程,第1卷(第2版):套接字API。”这两本书都是每个人在工作中都应该拥有的两件珍宝。

不要跟踪。看看资料来源。你可能想看看。