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

蒂姆

Linux 编程接口说

56.5.5 连接终止:close()

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

内核对套接字使用哪些数据结构?它们是否与常规文件的类似:

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

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

“多个文件描述符引用同一个套接字”是如何创建的?它是由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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Linux 中读写同一个文件描述符的问题

套接字描述符与文件描述符

是否可以在java中为同一个客户端创建多个套接字?

当我在套接字文件描述符上调用close时,关闭了多少个文件描述符?

在Linux中创建新线程是否重复文件描述符和套接字描述符?

同一个Boost TCP套接字对象上的多个连接

无法在同一个套接字中创建新变量并作为 udp 发送

如何创建同一个XAML文件的多个部分类

Protobuf java 从 DescriptorProto 创建一个描述符

如何在多线程程序中安全删除与 epoll 一起使用的套接字文件描述符?

每个客户端可以有多个套接字文件描述符吗?

为什么使用execve创建远程shell不会覆盖文件描述符和套接字?

Jetty 套接字文件描述符泄漏

通过Linux套接字发送文件描述符

什么是文件描述符/连接/套接字/ ip?

通过文件描述符或套接字轮询 X 事件

接受的套接字上的“错误文件描述符”错误

如何确定文件描述符是否附加到Linux中的文件或套接字

处理套接字描述符,如文件描述符(fstream)?C ++ / Linux

如何释放多个进程之间共享的套接字描述符?

在Java中,如何从已打开的C套接字的文件描述符中获取Socket或DatagramSocket?

如何在libuv中获取可接受的tcp套接字的文件描述符?

什么是网络套接字的文件描述符?以及如何获得?

实体框架 - 无法创建多个引用同一个表的 DbContext。- 解决方法

列表乘法何时创建对象的多个副本,何时引用同一个对象?

JOIN 与右侧同一个表的多个引用

多个bean引用同一个Singleton Bean

如何识别两个文件描述符是否指向同一文件

高级文件描述符重定向,如何一次处理多个文件描述符