Libevent库笔记(一)下载和编译,测试demo
1.下载及编译
1.1.下载
官网:http://libevent.org/
1.4和2.x系列版本,1.4 比较老,但源码简单,适合学习;
2.x 比较新,使用时建议用2.x版本,与1.4版本接口不兼容。
当前2个系列版本状态(2020.02.09)
libevent-release-1.4.15-stable.tar.gz
libevent-2.1.11-stable.tar.gz
1.2.编译
1.2.1.说明
./configure 检查安装环境,生成makefile
make 生成目标文件和可执行文件
sudo make install 将相关头文件、库文件复制到系统目录
1.2.2.Ubuntu平台编译和安装
这里以2.11版本为例
解压
tar -zxvf libevent-2.1.11-stable.tar.gz
进入解压后的目录
cd libevent-2.1.11-stable/
./configure #检查安装环境,生成makefile
make #生成目标文件和可执行文件
sudo make install #将相关头文件、库文件复制到系统目录
提示库已经安装到/usr/local/lib
可进入目录查看相关库
另外头文件位于/usr/local/include
其中event2是一个目录,
1.2.3.编译和测试demo
进入sample目录:
cd sample
$ gcc -o hello hello-world.c -levent
运行demo:
./hello
运行一个客户端连接
$nc 127.0.0.1 9995
客户端连接服务端后,服务端反馈hello,world后,立马进行FIN挥手,客户端进行ACK应答。
使用wireshark抓包查看
1.2.4.Demo代码
大致可以看出监听端口号为9995
事件中交互一个MESSAGE(为字符串"Hello, World!\n";)
/*
This example program provides a trivial server program that listens for TCP
connections on port 9995. When they arrive, it writes a short message to
each client connection, and closes each connection once it is flushed.
Where possible, it exits cleanly in response to a SIGINT (ctrl-c).
*/
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h>
#ifndef _WIN32
#include <netinet/in.h>
# ifdef _XOPEN_SOURCE_EXTENDED
# include <arpa/inet.h>
# endif
#include <sys/socket.h>
#endif
#include <event2/bufferevent.h>
#include <event2/buffer.h>
#include <event2/listener.h>
#include <event2/util.h>
#include <event2/event.h>
static const char MESSAGE[] = "Hello, World!\n";