libevent 在FreeBSD下,因为版本的差异,导致了神奇的问题
来源:互联网 发布:国家药监局数据库 编辑:程序博客网 时间:2024/04/29 07:35
libevent 版本导致库不一致导致的问题
大致环境:
根据目前的需求,需要完成一个双向双网段间的透明代理。程序需要跨平台,因此采用了libevent库进行开发。
但是在windows环境下,直接是在官网下载的最新版libevent-2.0.21-stable.tar.gz,编程使用的VS2008 IDE工具,因此在windows下开发调试通过。
后面在FreeBSD 8.1下使用makefile进行编译,使用到的库还停留在 libevent-1.4.so.4,这时候全然没有发现这个问题,因为Makefile中直接就是一个 -levent。
流程大致如下:
前端程序,启动后,监听指定的N个端口,同时创建一个线程去连接 “后端程序”(这里的后端程序,前端程序,可以理解为透明代理,也就是我自己要实现的程序),当连接成功后,event_add(pinfo->ev,sock,EV_READ,recv_from_back,pinfo); 添加这么一个事件,用于接收后端的消息。对于指定监听的N个端口事件,均被添加到 libevent队列,当有连接过来后,将消息封装转发给后端程序。
后端程序,启动后,监听一个指定的端口,该端口仅用于 ”前端程序“ 连接,当连接成功后,event_add(pinfo->ev,sock,EV_READ,recv_from_front,pinfo); 添加一个事件,用于接收前端的消息。
看似没问题,事实上在Windows下的 libevent2.0库下确实没有问题,但在不匹配的库版本上,问题来了,而且这问题并不是完全不通,丫的,也就是这,让我犯了好久的迷糊,苦苦的查找BUG,根本就没有BUG可查。
现象就是:
一、前端能够顺利连接上后端
前端部署在 192.168.4.242 ,还有一块网卡地址为 172.26.78.1
二、前端能够接收客户端的连接
三、后端能够收到前端连接,且能收到前端消息
问题就在,前端却是收不到后端的消息。。。
”[664] 发送给前置机,连接真实服务器[192.168.3.99:80]失败..." 这条消息前置机并没有收到。。。
一开始排除问题,是先检查代码逻辑,确定没有问题了,然后抓包分析,看看是否是因为后端没有发送数据给前端,或者是发送过程中没有收到。。。
排除这个原因后,实在是想不出问题出在哪儿,这时候,出去外面走走,散散心。。。。 灵光一闪,可能是版本问题,查看版本,发现版本才 1.4,赶紧重新编译libevent到2.0,再次测试。
正确的运行结果如下:
总结:
虽然是一个简单的库版本不匹配引起的问题,但从中却能审视自己,大意忽略了一些基础内容,同时也从中能学到和巩固一些知识,既加深了对libevent的认知,也在检查代码的同时,修正了一些可能存在的隐患。 遇到问题,排除法可能是一个很好的策略。
- libevent 在FreeBSD下,因为版本的差异,导致了神奇的问题
- 两个因为JDK版本低导致的问题记录
- 因为eclipse版本导致的几个小问题
- 解决中文PDF 因为未嵌入字体导致在某些环境下的乱码问题
- ieda 怎么解决引入版本过多导致的no class found(因为它蒙圈了)
- IAR版本差异的问题
- 正则表达式在ff与ie下的一个神奇差异
- 遇到一个gcc编译器版本导致的运行结果有差异的问题
- 如何解决new了之后因为执行流跳转而导致的内存泄漏的问题
- 在网上找了一段javascript写的浮动窗口的拖拽,发现因为浏览器版本等问题,使用有些问题,稍微修改了一些
- [安卓]解决因为冻结了系统程序导致不能开机的问题
- 1.关于GCC版本导致的差异--宏 -D
- ORACLE在使用distinct可能因为查询的列过少导致数据丢失的问题
- 解决在Vue项目中时常因为代码缩进导致页面报错的问题
- SimpleDateFormat在jdk不同版本的差异
- 当前FreeBSD的版本
- 当前FreeBSD的版本
- Excel版本导致的问题?
- AndroidTV版常见的问题
- OnScrollListener回调分析
- Eclipse Java注释模板设置详解
- Mysql中自增字段(AUTO_INCREMENT)的一些常识
- 依赖 关联 聚合 组合 区别 理解
- libevent 在FreeBSD下,因为版本的差异,导致了神奇的问题
- Bmob的初步使用
- JavaBean入门 - 概念和简单例子
- 20150119
- java java.lang.UnsupportedClassVersionError: Bad version number in .class file
- OnlineJudge 离线题库采集
- easySQLite使用帮助
- [Leetcode]Binary Tree Zigzag Level Order Traversal
- Activity入门详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)