Libevent调用
1.最基本的打印libevent版本
#include <event.h>
#include <stdio.h>int main()
{const char *version = event_get_version();printf("%s\n",version);return 0;
}
# gcc getVersion.c -o getVersion -levent
参考:https://github.com/mike-zhang/testCodes/tree/master/libeventTest
2.echoServer
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>#include <event.h>void sock_read(int fd, short event, void *arg)
{char buf[255];int len;struct event *ev = arg;len = recv(fd, buf, sizeof(buf)-1, 0);if (len == -1){perror("recv error\n");if (errno != EAGAIN && errno != EINTR){close(fd);free(ev);}return;}else if (len == 0){close(fd);fprintf(stderr, "Connection closed\n");free(ev);return;}buf[len] = '\0';fprintf(stdout, "Read: %s\n", buf);/* Reschedule this event *//* 重新安排此事件 */event_add(ev, NULL);
}void sock_accept(int fd, short event, void *arg)
{struct event *ev = arg;struct sockaddr addr;socklen_t len = sizeof(addr);//由于此结构要长期使用,所以rev必须动态分配,否则离开此函数后会自动释放,导致段错误struct event* rev = (struct event*)malloc(sizeof(*rev));int s = accept(fd, &addr, &len);if (s == -1){perror("accept error\n");return;}fprintf(stdout, "accept socket: %d\n", s);/* Initialize one event *//* 初始化一个事件 */event_set(rev, s, EV_READ, sock_read, rev);/* Add it to the active events, without a timeout *//* 将它添加到活动事件,不超时 */event_add(rev, NULL);/* Reschedule this event *//* 重新安排此事件 */event_add(ev, NULL);
}int main (int argc, char **argv)
{struct event ev;int fd;struct sockaddr_in addr;fd = socket(AF_INET, SOCK_STREAM, 0);if (fd == -1){perror("socket error\n");exit(-1);}bzero(&addr, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(10000);addr.sin_addr.s_addr = 0;if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1){perror("bind error\n");exit(-1);}if (listen(fd, 5) == -1){perror("listen error\n");exit(-1);}/* Initalize the event library *//* 初始化一个事件库 */event_init();/* Initalize one event *//* 初始化一个事件. */event_set(&ev, fd, EV_READ, sock_accept, &ev);/* Add it to the active events, without a timeout *//* 将它添加到活动事件,不超时 */event_add(&ev, NULL);event_dispatch();return (0);
}
编译:
# gcc myevent.c -o myevent -Wl,-rpath,/usr/local/libevent/lib/ -L/usr/local/libevent/lib/ -levent -I/usr/local/libevent/include/
启动:
# ./echoServer
#telnet 127.0.0.1 10000
退出
方法:
1、ctrl+]
2、quit
参考:
http://blog.linuxphp.org/archives/1482/ http://blog.linuxphp.org/archives/1487/ http://blog.linuxphp.org/archives/1488/
http://blog.chinaunix.net/uid-25885064-id-3399488.html
http://www.cnblogs.com/ggjucheng/archive/2012/02/02/2335495.html
http://www.cnblogs.com/cnspace/archive/2011/07/19/2110891.html
http://blog.chinaunix.net/uid-15145533-id-2775910.html
http://blog.chinaunix.net/uid-15145533-id-2775909.html
Libevent调用相关推荐
- libevent mysql_在 libevent 中使用 MariaDB(MySQL)
在之前我翻译的官方文档中提到了 MariaDB 提供了对异步 I/O 的支持.那篇文章是一个比较简要的介绍.不过实际适配中,官方也提供了一个完整适配 libevent 的示例代码.本文算是对我上述示例 ...
- 在 libevent 中使用 MariaDB(MySQL)
在之前我翻译的官方文档中提到了 MariaDB 提供了对异步 I/O 的支持.那篇文章是一个比较简要的介绍.不过实际适配中,官方也提供了一个完整适配 libevent 的示例代码.本文算是对我上述示例 ...
- libevent多线程
利用libevent和多线程 实现多并发的服务器的设计.主进程监听连接的到来使用一个base,进行事件循环.每当 一个连接进来时,创建一个新的线程实现与客户端之间的通信,子线程建立一个base,进行事 ...
- libevent源码学习-----event操作
libevent核心结构是event_base和event,接下来主要介绍event结构 /* event的定义的主要部分 */ struct event {/* ... *//* event监听的描 ...
- Libevent教程001: 简介与配置
本文内容大致翻译自 libevent-book, 但不是照本翻译. 成文时, libevent最新的稳定版为 2.1.8 stable. 即本文如无特殊说明, 所有描述均以 2.1.8 stable ...
- 高性能、高并发TCP服务器(多线程调用libevent)
本文讲述的TCP服务器是模仿memcache中的TCP网络处理框架,其中是基于libevent网络库的. 主线程只处理监听客户端的连接请求,并将请求平均分配给子线程. 子线程处理与客户端的连接以及相关 ...
- [Go实战]CGO 入门系列-手把手教程4 调用 libevent (c语言类库)为案例
cgo-libevent-for-windows cgo-libevent-for-windows 参考文章: 1.环境(windows) 2.下载libevent源码 并制作dll动态库 利用min ...
- Memcached安装以及PHP的调用
一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.下载 #wget http://www.monkey.org/~provos/ ...
- libevent介绍
libevent是一款事件驱动的网络开发包 由于采用 c 语言开发 体积小巧,跨平台,速度极快. 通常我们在建立服务器的处理模型的时候,主要是下面集中模型; (1) a new Connecti ...
最新文章
- cassandra可视化工具_程序员绘图工具——PlantUML
- 20应用统计考研复试要点(part21)--概率论与数理统计
- D - 邂逅明下 HDU - 2897(有点水平的巴什博奕)
- 关于 VDD VSS VCC VEE VPP
- JAVA_SE基础——24.面向对象的内存分析
- Ubuntu failed to fetch ... hash sum mismatch
- P3349-[ZJOI2016]小星星【树形dp,容斥】
- K8S_Google工作笔记0013---通过二进制方式_部署node节点_安装docker
- 【机器学习】因子分解机(Factorization Machine)原理与java实现
- 华为机试-字符串通配符
- flowable工作流所有业务概念
- Python数据处理Tips数据重复值处理常用方法
- python 调用 C++ 函数
- 详说ArcGIS之重采样技术图文解析
- 让硬盘灯不再狂闪,调整Win7系统绝技(转)
- 使用python将pdf转化为长图片
- 基于Matlab-gui信号系统设计
- 问题-某个程序改了ICO图标后编译后还是显示老图标?
- android 时间水印相机,时间水印相机
- 编码原理详解(五)---熵编码(CAVAL)