首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建“多个文件描述符引用同一个套接字”?

如何创建“多个文件描述符引用同一个套接字”?
EN

Unix & Linux用户
提问于 2020-11-24 19:59:23
回答 1查看 1.7K关注 0票数 -1

Linux编程接口显示

56.5.5连接终止: close()终止流套接字连接的通常方法是调用close()。如果多个文件描述符引用同一个套接字,则当所有描述符关闭时,连接将终止。

内核用于套接字的数据结构是什么?它们是否与用于常规文件的类似:

  • 文件描述符表
  • 文件描述表
  • vnode表?

“多个文件描述符引用同一个套接字”是否与“多个文件描述符引用相同的套接字描述”相同?

如何创建“多个文件描述符引用同一个套接字”?它是由dup()创建的还是由特定于套接字的函数创建的?

我以前见过两种不同的套接字定义:

  • 套接字与端口(TCP端口、UDP端口)相同。
  • TCP套接字由连接标识,因此多个套接字可以对应于同一个TCP端口。(我猜这是套接字API中使用的定义)

引用在“多个文件描述符引用同一个套接字”中使用的套接字的定义是什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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/

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/621373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档