提问人:Le Young 提问时间:9/28/2023 最后编辑:Le Young 更新时间:9/29/2023 访问量:59
为什么 socketpair() 返回 2 个套接字?
Why does socketpair() return 2 sockets?
问:
socketpair()
几乎总是与 一起使用。它返回 2 个套接字,在调用 之后,我们得到了 4 个套接字。在我见过的大多数示例中,每个进程中的两个套接字中的一个被关闭,另一个紧随其后被保留。似乎总是有 2 个无用的插座。鉴于这种情况,为什么不直接返回一个连接到自身的套接字呢?这样,在调用 之后,每个套接字都在使用中。fork()
fork()
fork()
sockpair()
fork()
是否有返回连接到自身的套接字的等效项?socketpair()
如果不是,是因为这样的套接字不可能(或容易)实现吗?
如果可能,我该如何实现?
编辑:我认为这个问题与 C/Unix 中的 Socketpair() 不同。 它没有解释为什么总是有 2 个无用的套接字需要关闭。
答:
1赞
Serge Ballesta
9/29/2023
#1
我认为根本原因是 的概念取自 .管道是单向通道,因此调用会创建一对端点,一个用于读取,一个用于写入。socketpair
pipe
pipe
当您创建一对套接字时,您希望稍后有一对进程或线程,每个进程或线程都使用对的一端,与使用的完全相同,只是您有一个双向通道。但关键是,无论使用多少进程或线程,在一个端点上写入的内容都会在另一个端点上读取。您可以想象,一个进程在一个套接字上发布请求,并且,如果使用像互斥锁这样的同步工具,许多工作线程在它持有互斥锁的那一刻读取一个要处理的请求。pipe
评论
fork()
不会创建新的套接字。它复制同一套接字的文件描述符。