Linux 编程接口说
56.5.5 连接终止:close()
终止流套接字连接的常用方法是调用 close()。如果多个文件描述符引用同一个 socket,则当所有描述符都关闭时,连接将终止。
内核对套接字使用哪些数据结构?它们是否与常规文件的类似:
“多个文件描述符引用同一个套接字”与“多个文件描述符引用同一个套接字描述”的意思相同吗?
“多个文件描述符引用同一个套接字”是如何创建的?它是由dup()
某些特定于套接字的函数创建的吗?
我之前见过两种不同的套接字定义:
套接字与端口相同(TCP 端口、UDP 端口)
一个 TCP 套接字由一个连接标识,因此多个套接字可以对应同一个 TCP 端口。(我猜这是 Socket API 中使用的定义)
引用在“多个文件描述符引用同一个套接字”中使用了哪个套接字定义?
简单的答案是记住文件描述符只是对实际套接字的引用,您可以有多个文件描述符引用同一个套接字。引用计数用于在删除最后一个引用时终止套接字。
所以,是的,您可以dup(2)
使用套接字文件描述符。
更长的解释是文件描述符只是内核 inode 的用户空间句柄。内核struct inode
有一个指向内核的指针,struct socket
它是一个更高级别的通用套接字接口。该结构将有一个指向较低级别的指针,struct sock
即实际的 tcp/ip 套接字。请记住,您可以拥有用于其他地址系列的套接字。注意,这个解释仍然有些简化。
要回答您的最后一个问题,关于引用的两个定义都是正确的。
这篇博文实际上很好地解释了创建套接字和分配文件描述符的部分过程:https ://ops.tips/blog/how-linux-creates-sockets/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句