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

libevent 一个time server

阅读更多

#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);
}

void 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(7000);
    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;
}

分享到:
评论

相关推荐

    libevent 教程

    使用 libevent 可以快速构建一个 Echo Server。首先,创建一个 event_base,用于管理和调度事件。然后,创建一个监听事件,并将其绑定到 event_base 上。当有连接请求时,回调函数会被触发,处理请求并返回响应。 7...

    libevent-0.7c 源码(资料中转)

    在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。  Libevent提供了DNS,HTTP Server,RPC等组件,...

    libevent-2.1.1-alpha.tar.gz

    在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。 Libevent提供了DNS,HTTP Server,RPC等组件,...

    libevent v2.0.10源码(跨平台事件触发的网络库)

    在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。  Libevent提供了DNS,HTTP Server,RPC等组件,...

    libevent库的使用方法实例

    本文将通过一个简单的Time Server实例,详细讲解libevent的基本使用方法。 1. **初始化libevent** 在使用libevent之前,首先需要进行初始化。`event_init()`函数是libevent库的入口,用于初始化内部的数据结构和...

    libevent库的使用--定时器的使用实例

    在`main`函数中,首先检查命令行参数以决定要加载的文件,然后初始化libevent库,调用`load_file`启动定时器,接着创建一个HTTP服务器`http_server`,监听指定的IP地址`http_addr`和端口`http_port`。通过`evhttp_...

    time-server

    标题中的"time-server"指的是一个时间服务器程序,它能够提供当前时间信息。在描述中提到的使用方法,通过telnet命令连接到本地主机的8000端口,然后服务器会返回其系统的时间戳,这里显示的是"IRKT"时区(伊朗标准...

    memcached-redis性能测试.docx

    Libevent是一个事件驱动的库,用于实现高效的网络连接处理。Memcached依赖于libevent来处理客户端连接,并能够同时支持大量并发连接。理论上,Memcached可以处理无限数量的连接,但实际上,由于操作系统线程能力的...

    linux-media-server-源码.rar

    在Linux操作系统环境下,构建一个媒体服务器是实现流媒体服务、视频点播或在线音频播放的关键。"linux-media-server-源码.rar"提供的源代码提供了这样的功能,让我们一起深入探讨其中涉及的技术和知识点。 1. **跨...

    allexamples.zip

    libevent是一个跨平台的事件通知库,它可以处理各种I/O事件,如网络连接、定时器等。 7. **http2-upload.c**: 这个例子专注于HTTP/2协议的上传操作。HTTP/2是一种更高效的网络协议,支持多路复用,可以显著提高页面...

    time_interval_sum_server:服务器计算最近N毫秒内收到的数字总和

    在IT行业中,时间间隔求和服务器(time_interval_sum_server)是一种常见的系统设计概念,它用于实时处理和聚合数据流中的数值。在这个场景中,服务器需要能够接收来自不同源头的数字输入,并在指定的时间间隔内计算...

    zabbix4.0 版本安装手册

    在Zabbix 4.0版本中,部署的基本原理主要包括以下几个方面: 1. **Zabbix Server**: 作为核心组件,负责收集来自各个代理的数据,并将其存储在数据库中。 2. **Zabbix Agent**: 运行在被监控主机上,用于收集本地...

    centos 7.5 安装zabbix4.0

    下载zabbix server源码包 `wget -o zabbix-4.0.4.tar.gz 安装依赖 `yum install wget telnet ...

    FastDFS Storage端配置文件详解及启动注意事项

    - ` Tracker_server`: 指定Tracker服务器的IP和端口,通常会有多个Tracker节点,用逗号分隔。 - `listen_port`: Storage节点监听的端口,客户端和Tracker通过此端口进行通信。 - `http_tracker_server`: 如果开启...

    Memcached原理和使用详解

    - **基于libevent的事件处理机制**:为了实现高并发性能,Memcached内部采用了libevent库来处理客户端连接上的读写事件,libevent是一个高效的跨平台事件处理框架,支持多种操作系统,如Windows、Linux、BSD和...

    zlmediakit windows下编译后可直接用的服务,包含支持webrtc

    6. **测试**:运行编译后的服务,验证功能是否正常,可以尝试发布一个流或者连接到WebRTC服务器,看看能否成功传输音视频数据。 ZLMediaKit支持WebRTC意味着它可以与其他支持WebRTC的客户端(如Chrome、Firefox...

    dakara-server:达卡拉在线游戏服务器

    特拉维斯(Linux): ... sudo apt install libevent libboost-date-time-dev libboost-filesystem-dev libboost-system-dev libboost-locale-dev 在安装了所有必需的库之后,您可以编译源代码: mkdir

    RTCMultiConnection 基于webrtc的音视频流媒体服务器

    - **升级GCC版本**:GCC (GNU Compiler Collection) 是一个编译器集合,包含了C、C++等语言的编译器。对于Node.js的编译安装,推荐使用4.8.4及以上版本的GCC。 ```bash sudo apt-get update sudo apt-get ...

Global site tag (gtag.js) - Google Analytics