我阅读了手册页并浏览了这个示例以了解用法:https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/,但我无法找到使用epoll的方法,有人能帮我吗?
基本上,我正在编写一个netcat类型的实用程序,以便更好地学习c/networking。我已经创建了一个基本的服务器/客户端,可以在一个端口上监听和连接。现在我想扩展服务器方面来监听端口范围。
我计划通过for循环为每个端口创建socket()、bind()和listen()。
由于端口范围可以高达65K,我需要轮询它们,并在收到连接请求时接受()。
取消使用poll或epoll处理一个端口上的多个连接的典型c服务器的链接,这是数千个潜在端口之一上的一个连接。从这些例子中,我不太明白如何能够epoll套接字,何时请求连接,接受它并取消绑定/停止侦听/轮询。
有没有人能给我一些解释/代码来帮助我开始呢?
最佳答案
1-创建所有服务器套接字
它们的文件描述符将包含在一个范围内,比如[4199]
3-在循环中将它们全部添加到epoll描述符中。
然后在正常的epoll循环中,如果事件的描述符在[4199]范围内,或者实际上是您的范围内,那么您知道它是一个服务器套接字,您需要接受它,否则就对所连接的描述符执行任何操作。
另一种方法是创建两个epoll描述符,一个仅用于服务器套接字,另一个仅用于连接的描述符。这样做的好处是你需要在他们两人身上都使用epoll!所以我不建议这么做。
由于要创建的描述符数量太多,您很可能需要更改一些内核参数,因为一个进程中有这么多打开的描述符,您可能会遇到一些限制。
关于c - epoll-轮询多个文件描述符(即套接字),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19044304/