epoll – 轮询多个文件描述符(即套接字)

我阅读手册页,并通过这个例子使用: https : //banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/ ,但我不能一个方法来做我想要使用epoll的方法,任何人都可以借给我一些帮助吗?

基本上我正在写一个netcattypes的工具,以更好地学习C /networking。 我创build了一个基本的服务器/客户端,可以监听和连接一个端口。 现在我想展开服务器方面的侦听端口范围。

我打算通过创build套接字(),bind()和listen()的每个端口的for循环来做到这一点。

由于端口范围可以高达65k,我需要轮询他们,接受()当有一个连接请求收到。

Unlinke使用poll或epoll处理一个端口上的多个连接的典型C服务器,这是数千个潜在端口之一的一个连接。 我无法从示例中得到如何插入套接字以及何时请求连接接受它并解除绑定/停止监听/轮询。

有没有人有任何例子解释/代码让我开始请?

1 – 创建所有的服务器套接字

2 – 它们的文件描述符将被包含在一个范围内,如[4,199]

3 – 将它们全部添加到epoll描述符中。

然后在普通的epoll循环中,如果事件描述符在[4,199]的范围内,或者实际上是你的范围,那么你知道这是一个服务器套接字,你需要接受它,否则做任何你做的事你连接的描述符。

另一种方法是创建2个epoll描述符,并使用一个仅用于服务器套接字,另一个仅用于连接的描述符。 这样做的好处是你需要在他们身上使用epoll! 所以我不会建议这个。

由于要创建的描述符的数量非常大,因此很可能需要更改一些内核参数,因为在某个进程中可能会遇到许多打开描述符的限制。