无我

让内心永远燃烧着伟大的光明的精神之火!
灵活的思考,严谨的实现
豪迈的气魄、顽强的意志和周全的思考

libevent使用中要注意的问题

   项目中用到了libevent,我主要用他来管理网络连接对象的读写事件、定时器事件。
   有了libevent,对这类异步处理,确实增加了许多方便性,只需要在调用event_set时传入自己的回调函数,自己就只需要安心睡大觉了(有事情时他会叫你的)。
   可是,在后来项目复杂后,几次发现项目陷入无响应状态,也就是不崩溃,不报错,不退出,但是也不响应事情!
   这真是个令人抓狂的事情!要知道:在基本上所有的代码都在我严密的TRY-CATCH天罗地网之下,但是这个罪魁祸首却依然逍遥法外,还找不到丝毫蛛丝马迹!
   经过仔细的研究,终于发现端倪:程序陷入进了libevent的loop之中!
   为什么会这样了?
   后来发现至少两种情况导致了这个问题:
   1、某个网络连接对象已经正常或者异常close了,但是没有调用event_del删除这个对象,他还在libevent的链中轮询;
   2、因为libevent可以重复注册event,所以在某种逻辑下,不小心多次注册了某个event或者定时器后,libevent也可能会僵死。

   另外,当时我希望能查看出错以后的libevent内部情况,所以使用了他的event_base_dump_events函数,很可惜,这个dump能提供给我的实在是少得可怜而且简单得基本没有价值的信息。这个事实实在是让我感到很遗憾。

posted on 2014-04-17 17:35 Tim 阅读(1925) 评论(1)  编辑 收藏 引用 所属分类: C/C++语言计算机网络

评论

# re: libevent使用中要注意的问题 2014-05-06 16:46 allen

博主可以自己修改一下libevent , :)  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

公告

本博客原创文章,欢迎转载和交流。不过请注明以下信息:
作者:TimWu
邮箱:timfly@yeah.net
来源:www.cppblog.com/Tim
感谢您对我的支持!

留言簿(9)

随笔分类(173)

IT

Life

搜索

积分与排名

最新随笔

最新评论

阅读排行榜