`
fujinbing
  • 浏览: 238888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

libevent 小例

阅读更多

#include <netinet/in.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <event.h> 
#include <stdio.h> 
#include <time.h>


void connection_time(int fd, short event, struct event *arg) 

    char buf[32]; 
    struct tm t; 
    time_t now; 

    time(&now); 
    localtime_r(&now, &t); 
    asctime_r(&t, buf); 

    write(fd, buf, strlen(buf)); 
    shutdown(fd, SHUT_RDWR); 

    free(arg); 
}

connection_accept(int fd, short event, void *arg)  
{
    /* for debugging */
    fprintf(stderr, "%s(): fd = %d, event = %d.\n", __func__, fd, event); 

    /* Accept a new connection. */
    struct sockaddr_in s_in; 
    socklen_t len = sizeof(s_in); 
    int ns = accept(fd, (struct sockaddr *) &s_in, &len); 
    if (ns < 0) { 
        perror("accept"); 
        return; 
    } 

    /* Install time server. */
    struct event *ev = malloc(sizeof(struct event)); 
    event_set(ev, ns, EV_WRITE, (void *) connection_time, ev); 
    event_add(ev, NULL); 
}




int main(void) 

    /* Request socket. */
    int s = socket(PF_INET, SOCK_STREAM, 0); 
    if (s < 0) { 
        perror("socket"); 
        exit(1); 
    } 

    /* bind() */
    struct sockaddr_in s_in; 
    bzero(&s_in, sizeof(s_in)); 
    s_in.sin_family = AF_INET; 
    s_in.sin_port = htons(9000); 
    s_in.sin_addr.s_addr = INADDR_ANY; 
    if (bind(s, (struct sockaddr *) &s_in, sizeof(s_in)) < 0) { 
        perror("bind"); 
        exit(1); 
    } 

    /* listen() */
    if (listen(s, 5) < 0) { 
        perror("listen"); 
        exit(1); 
    } 

    /* Initial libevent. */
    event_init(); 

    /* Create event. */
    struct event ev; 
    event_set(&ev, s, EV_READ | EV_PERSIST, connection_accept, &ev); 

    /* Add event. */
    event_add(&ev, NULL); 

    event_dispatch(); 

    return 0; 
}



gcc -o libe -I/app/soft/libevent/include -L/app/soft/libevent/lib -levent libe.c
分享到:
评论

相关推荐

    Libevent源码分析 pdf文档 带目录

    以__func__宏为例,在GCC中,它提供了当前函数的名字,而Microsoft Visual Studio使用__FUNCTION__宏来完成相同的功能。event-config.h通过定义如下宏来统一不同编译器的差异: ```c #define EVENT___func____...

    libevent-1.3e-Win32

    在本例中,这个版本可能是为了支持或配合安装memcached——一个流行的数据缓存系统,它依赖于Libevent来处理网络I/O事件。 **Libevent介绍** Libevent是一个跨平台的库,用于编写高性能的网络服务器。它提供了一种...

    在X86上libevent的简单使用.docx

    本例中选择了`/home/user/code`作为存放位置。 3. **解压源码包**: - 进入`/home/user/code`目录,执行命令`tar zxvf libevent-2.1.8-stable.tar.gz`进行解压操作。 4. **创建安装目录**: - 在`/home/user/...

    libevent-thread-20140224-1.7z

    《深入理解Libevent多线程机制:以libevent-thread-20140224-1源码为例》 Libevent是一个强大的事件通知库,它允许程序员在多个平台上高效地处理网络事件,如TCP、UDP、Unix域套接字等。在单线程环境中,Libevent...

    libevent官方文档英文版

    以TCP连接的"connect()"调用为例,操作系统的网络栈会向TCP连接另一端的主机发送一个SYN数据包,并且不返回控制权,直到SYN数据包得到响应,或者经过足够的时间后网络栈放弃等待。 总之,Libevent官方文档是一份...

    cmake_vs2015_x64_libevent

    在本例中,“cmake_vs2015_x64_libevent”表明我们将使用CMake来配置一个项目,这个项目的目标是使用Visual Studio 2015的x64编译器来构建libevent库。libevent是一个事件通知库,它提供了一种方式来处理多个网络...

    Linux下Memcache的源码安装

    在本例中,我们使用的版本是memcached-1.2.6,可以从官方网站http://www.danga.com/memcached/download.bml获取。下载完成后,使用以下命令进行解压: ```bash tar xvfz memcached-1.2.6.tar.gz ``` 接着,我们...

    安装memcached 文档.docx

    在本例中,我们通过wget命令下载libevent-2.0.4-alpha.tar.gz文件,然后解压并进行编译安装。 完成libevent的安装后,我们继续下载并安装Memcached。同样地,解压memcached-1.4.5.tar.gz文件,执行`./configure`...

    Linux环境下Memcache的安装

    在本文中,我们以memcached-1.4.10.tar.gz为例,但建议始终下载最新的稳定版本。 其次,安装Memcache依赖的libevent库。libevent是一个事件通知库,用于处理网络连接和定时事件。你可以从libevent的官方网站...

    Memcached部署指南.docx

    - **下载最新版本**(本例中为1.4.24版): ```bash cd /tmp tar zxvf memcached-1.4.24.tar.gz cd memcached-1.4.24 ``` - **配置编译环境**: ```bash ./configure --with-libevent=/usr/libevent --...

    文件分布式存储系统

    - 解压并编译安装:`tar zxf libevent-2.0.20-stable.tar.gz && cd libevent-2.0.20-stable && ./configure && make && make install` - 创建符号链接:`ln -s /usr/local/lib/libevent*/lib/` 和 `ln -s /usr/...

    64位机器上安装memcache详细说明

    在本例中,Memcached需要libevent库来处理事件驱动的网络通信。你可以通过以下命令下载libevent和Memcached的源代码: ```bash # cd /usr/local/src/ # wget ...

    linux下安装jdk与memcached及memcached代理说明

    1. **下载JDK**: 首先,你需要从Oracle官方网站或者其他可信赖的源下载适合Linux环境的JDK安装包,这里以`jdk-1_5_0_07-linux-i586.rpm`为例。 2. **创建目录**: 创建一个目录,例如 `/usr/java`,用于存放JDK。 3. ...

    php7下安装event扩展方法

    安装支持库libevent,需要编译高版本(这里以最新版本release-2.1.8-stable为例) wget -c ...

    Python的网络编程库Gevent的安装及使用技巧

    安装(以CentOS为例) gevent依赖libevent和greenlet: 1.安装libevent 直接yum install libevent 然后配置python的安装 2.安装easy_install (1) wget -q http://peak.telecommunity.com/dist/ez_setup.py (2)...

    FastDFS_v3.06.tar.gz

    这里以libevent-2.0.18-stable为例,首先解压下载的tar.gz文件,然后按照以下步骤进行编译安装: 1. 解压:`tar -zxvf libevent-2.0.18-stable.tar.gz` 2. 进入目录:`cd libevent-2.0.18-stable` 3. 编译:`./...

    简易HttpServer

    以libevent为例,核心在于创建事件基础结构,设置监听套接字,然后在事件循环中处理连接请求。下面是一段简单的C++代码示例: ```cpp #include #include void callback(struct evhttp_request *req, void *arg) ...

    Linux服务器中对于Memcache的安装配置方法

    在本例中,我们使用的Memcache版本是1.3.0,libevent版本是1.3。你可以通过wget命令从官方网站或提供的链接下载这两个软件包。如果服务器上没有预装wget,可以使用`yum install wget`或`apt-get install wget`(取决...

    04 谷粒商品pms_FastDfs1

    FastDFS通常在Linux操作系统上运行,此处以CentOS 7.4为例。安装FastDFS之前,需要确保系统已经安装了以下依赖: 1. GCC编译环境:`yum install gcc-c++ -y` 2. libevent库:`yum -y install libevent` 3. Perl环境...

Global site tag (gtag.js) - Google Analytics