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-pthreads-2.1 cannot open shared object file“问题