今天几个bug的排查过程
1. event_base_loop 未进入消息循环,自动退出
解决方法:gdb跟踪到退出的代码,然后查看代码,分析为什么退出,发现是因为没有事件,所以退出
2. 如果client做了connect,但是服务器没有accept,则一直触发事件
解决方法:怀疑是没有边缘触发,strace发现用的确实是epoll,找到epoll设置边缘触发的标志位,在libevent代码中搜索此标志位,找到libevent的标志位,设置即可
3. 调用redis的anetRead,总是失败
解决方法:跟踪代码,发现是调用read时返回了-1,man read,发现非阻塞io读不到数据会返回-1,查看redis代码中的anetRead,发现他没用,而是重新写了一个,并且判断errno=-11时,认为不是错误