监视套接字描述符
Monitoring Socket descriptors
我有一个应用程序,它一次打开了许多套接字描述符。我想监视这些只是针对任何活动,并关闭一段时间没有看到任何活动的描述符。我有一些解决方案,但不确定这是否可以通过防火墙规则完成。我不想浪费精力通过某些系统服务或配置来实现的事情。
它必须在基于 Linux 的系统上完成。
我想到的解决方案是使用timerfd_create并在描述符上使用计时器来监视所有活动套接字。任何以更好的方式实现这一目标的建议都会有所帮助。提前谢谢。
使用 select()
来监视套接字,手册页末尾有一个示例。基本上,您将文件描述符添加到fd_set
并调用它返回select()
当可以读取或写入其中一个受监视的文件描述符时,或者如果您设置了超时,则可以使用具有小超时的 select 来检查计时器回调中的 fd 并关闭尚未准备好的 fd。
我在timerfd.h中使用了timerfd_create和timerfd_settime api。检测关闭套接字的另一个选项是 sysconf 中的keep_alive超时。keep_alive超时没有多大帮助,以防套接字处于活动状态但没有活动,因此不得不使用较早的选项。
相关文章:
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 我可以调用 bind() 然后在同一个套接字描述符上调用 connect() 吗?
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- read() 上的不同行为取决于写入不可写内存时表示文件、匿名管道或套接字的文件描述符
- 如果我在套接字描述符上使用 fdopen(),如何关闭套接字()
- 带有线程的 Linux 套接字文件描述符
- 监视套接字描述符
- 套接字编程:"接受:错误的文件描述符"
- 提升 ASIO 套接字使用文件描述符
- Unix 域套接字:发送文件描述符和 select()
- 从文件描述符实例化套接字对象的非侵入性方法
- 关于处理超过 1024 个套接字描述符
- 即使在文件描述符不可用的情况下,也能有效地侦听多个套接字
- 服务器多线程无法保存最后一个套接字描述符
- 访问子线程中的套接字描述符时"Bad file descriptor"
- 从套接字返回的文件描述符大于FD_SETSIZE
- linux/freebsd中的套接字描述符是否保证具有几乎连续的或可比较的数字?
- 从websocketpp中的connection或connection_ptr获取本机套接字描述符
- 套接字描述符在特定条件下从另一个线程关闭,当同一套接字上的accept()调用在Linux中进行时