为什么Linux在某些情况下将accept()视为read()操作?

问题描述 投票:0回答:1

假设我们有一个用 C 语言编写的套接字服务器,它是使用

poll()
epoll()
等轮询方法实现的。假设使用后者(同样适用于
poll()
)。

在任何现有的此类服务器中,包括

epoll()
手册页中的示例,每当
accept()
事件发生时,就会在侦听器上调用
EPOLLIN
。它有效。这意味着当服务器有待接受的连接时,会触发
EPOLLIN
事件。然而,EPOLLIN事件的
手册页
定义说:

艾波林
关联的文件可用于 read(2) 操作。

这意味着

EPOLLIN
是专门针对
read()
操作的事件。

为什么可以用于

accept()
?我浏览了所有相关的手册页,但没有指定
accept()
在轮询机制中被视为
read()
。然而它确实是这样工作的。

c linux sockets networking epoll
1个回答
1
投票

这在

accept(2)
的文档中进行了解释:

为了收到套接字上传入连接的通知,您 可以使用

select(2)
poll(2)
epoll(7)
。可读的事件将 当尝试新连接时传递,然后您可以 调用
accept()
获取该连接的套接字。 或者,您可以将套接字设置为在以下情况下传递
SIGIO
: 活动发生在套接字上;详情请参阅
socket(7)

© www.soinside.com 2019 - 2024. All rights reserved.