Libevent:获取接受的连接列表

Posted

技术标签:

【中文标题】Libevent:获取接受的连接列表【英文标题】:Libevent: get list of accepted connections 【发布时间】:2013-08-19 09:32:47 【问题描述】:

我正在开发一个专为在企业内部网络中使用而设计的多线程客户端-服务器应用程序。我将 libevent 用于异步 I/O(多个 pthread,每个线程具有一个 evconnlistener/bufferevent 对象)和 OpenSSL 用于加密。

现在我需要确定已建立连接的监控机制(例如,在服务器端检查客户端是否出现故障或超时)。而且似乎 libevent 2.0.21 没有提供任何 API 来获取活动连接列表。

我已经准备好编写全局数据结构(例如客户端 IP 列表),但可能有一种方法可以用于此目的,隐藏在 libevent API 的深处?

非常感谢。

【问题讨论】:

可以细读libevent源码,够小了。 如果客户端断开连接,Libevent 通常会立即超时。客户端断开连接和事件回调之间的时间差小于一秒。这是我下面的 event_cb。 bufferevent_setcb(bev, read_cb, write_cb, event_cb, NULL);所以我的意思是检查状态是不必要的。 非常感谢!但我有必要确定accept_cb() 中接受的套接字参数(IP 和端口)。也许我会尝试重写几个函数并重新编译库。 @MickeyKawick,是的,你是对的。建议查看Jason Ish提供的code,然后使用客户端保存socket信息,查看socket何时关闭。 【参考方案1】:

恐怕没有办法列出事件库监视的对象,更不用说仅列出已建立的连接及其状态。您可以尝试根据需要修补 libevent,或者您可以将分数排除在 libevent 之外接受的连接之外。

【讨论】:

我认为这个 [code] (github.com/jasonish/libevent-examples/blob/master/…) 并做到了。接受时,将套接字添加到全局变量中,关闭时,将套接字从全局变量中删除。

以上是关于Libevent:获取接受的连接列表的主要内容,如果未能解决你的问题,请参考以下文章

libevent的入门学习-库的安装

PHP 7 编译安装开启 libevent 扩展支持

Mingw+MSYS 中的 libevent 静态编译错误

解决“libevent-pthreads-2.1 cannot open shared object file“问题

CentOS下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)

libevent evhttp多线程