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调用相关推荐

  1. libevent mysql_在 libevent 中使用 MariaDB(MySQL)

    在之前我翻译的官方文档中提到了 MariaDB 提供了对异步 I/O 的支持.那篇文章是一个比较简要的介绍.不过实际适配中,官方也提供了一个完整适配 libevent 的示例代码.本文算是对我上述示例 ...

  2. 在 libevent 中使用 MariaDB(MySQL)

    在之前我翻译的官方文档中提到了 MariaDB 提供了对异步 I/O 的支持.那篇文章是一个比较简要的介绍.不过实际适配中,官方也提供了一个完整适配 libevent 的示例代码.本文算是对我上述示例 ...

  3. libevent多线程

    利用libevent和多线程 实现多并发的服务器的设计.主进程监听连接的到来使用一个base,进行事件循环.每当 一个连接进来时,创建一个新的线程实现与客户端之间的通信,子线程建立一个base,进行事 ...

  4. libevent源码学习-----event操作

    libevent核心结构是event_base和event,接下来主要介绍event结构 /* event的定义的主要部分 */ struct event {/* ... *//* event监听的描 ...

  5. Libevent教程001: 简介与配置

    本文内容大致翻译自 libevent-book, 但不是照本翻译. 成文时, libevent最新的稳定版为 2.1.8 stable. 即本文如无特殊说明, 所有描述均以 2.1.8 stable ...

  6. 高性能、高并发TCP服务器(多线程调用libevent)

    本文讲述的TCP服务器是模仿memcache中的TCP网络处理框架,其中是基于libevent网络库的. 主线程只处理监听客户端的连接请求,并将请求平均分配给子线程. 子线程处理与客户端的连接以及相关 ...

  7. [Go实战]CGO 入门系列-手把手教程4 调用 libevent (c语言类库)为案例

    cgo-libevent-for-windows cgo-libevent-for-windows 参考文章: 1.环境(windows) 2.下载libevent源码 并制作dll动态库 利用min ...

  8. Memcached安装以及PHP的调用

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.下载 #wget   http://www.monkey.org/~provos/ ...

  9. libevent介绍

    libevent是一款事件驱动的网络开发包 由于采用 c 语言开发 体积小巧,跨平台,速度极快. 通常我们在建立服务器的处理模型的时候,主要是下面集中模型; (1)    a new Connecti ...

最新文章

  1. cassandra可视化工具_程序员绘图工具——PlantUML
  2. 20应用统计考研复试要点(part21)--概率论与数理统计
  3. D - 邂逅明下 HDU - 2897(有点水平的巴什博奕)
  4. 关于 VDD VSS VCC VEE VPP
  5. JAVA_SE基础——24.面向对象的内存分析
  6. Ubuntu failed to fetch ... hash sum mismatch
  7. P3349-[ZJOI2016]小星星【树形dp,容斥】
  8. K8S_Google工作笔记0013---通过二进制方式_部署node节点_安装docker
  9. 【机器学习】因子分解机(Factorization Machine)原理与java实现
  10. 华为机试-字符串通配符
  11. flowable工作流所有业务概念
  12. Python数据处理Tips数据重复值处理常用方法
  13. python 调用 C++ 函数
  14. 详说ArcGIS之重采样技术图文解析
  15. 让硬盘灯不再狂闪,调整Win7系统绝技(转)
  16. 使用python将pdf转化为长图片
  17. 基于Matlab-gui信号系统设计
  18. 问题-某个程序改了ICO图标后编译后还是显示老图标?
  19. android 时间水印相机,时间水印相机
  20. 编码原理详解(五)---熵编码(CAVAL)

热门文章

  1. Windows10下python-pcl的安装步骤说明,亲测ok
  2. LabVIEW设计自定义滚动条
  3. 树莓派视觉小车 -- 物体跟踪(OpenCV)
  4. 鲜为人知的object-fit属性,让您的img图片不再因为固定宽高而被拉伸压缩
  5. 中体骏彩C++面试题
  6. 使用Vuforia Unity构建增强现实应用
  7. Effective C++ 1.0 -- 概述
  8. Java的小实验——各种测试以及说明
  9. mybatis批量更新的两种实现方式
  10. C++ template