Linux编程接口显示
56.5.5连接终止: close()终止流套接字连接的通常方法是调用close()。如果多个文件描述符引用同一个套接字,则当所有描述符关闭时,连接将终止。
内核用于套接字的数据结构是什么?它们是否与用于常规文件的类似:
“多个文件描述符引用同一个套接字”是否与“多个文件描述符引用相同的套接字描述”相同?
如何创建“多个文件描述符引用同一个套接字”?它是由dup()创建的还是由特定于套接字的函数创建的?
我以前见过两种不同的套接字定义:
引用在“多个文件描述符引用同一个套接字”中使用的套接字的定义是什么?
发布于 2020-11-25 11:06:45
简单的答案是记住,文件描述符只是对实际套接字的引用,您可以有多个文件描述符引用同一个套接字。当上次引用被删除时,引用计数用于终止套接字。
所以,是的,您可以dup(2)一个套接字文件描述符。
更详细的解释是,文件描述符只是内核inode的用户空间句柄。内核struct inode有一个指向内核struct socket的指针,这是一个更高级的通用套接字接口。该结构将有一个指向低级struct sock的指针,这是实际的tcp/ip套接字。记住,您可以为其他地址家族提供套接字。注意,这一解释仍然有些简化。
为了回答你的最后一个问题,这两个定义对引文都是正确的。
实际上,这篇博客文章很好地解释了创建套接字和分配文件驱动程序的部分过程:https://ops.tips/blog/how-linux-creates-sockets/
https://unix.stackexchange.com/questions/621373
复制相似问题