#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 可以快速构建一个 Echo Server。首先,创建一个 event_base,用于管理和调度事件。然后,创建一个监听事件,并将其绑定到 event_base 上。当有连接请求时,回调函数会被触发,处理请求并返回响应。 7...
在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。 Libevent提供了DNS,HTTP Server,RPC等组件,...
在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。 Libevent提供了DNS,HTTP Server,RPC等组件,...
在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。 Libevent提供了DNS,HTTP Server,RPC等组件,...
本文将通过一个简单的Time Server实例,详细讲解libevent的基本使用方法。 1. **初始化libevent** 在使用libevent之前,首先需要进行初始化。`event_init()`函数是libevent库的入口,用于初始化内部的数据结构和...
在`main`函数中,首先检查命令行参数以决定要加载的文件,然后初始化libevent库,调用`load_file`启动定时器,接着创建一个HTTP服务器`http_server`,监听指定的IP地址`http_addr`和端口`http_port`。通过`evhttp_...
标题中的"time-server"指的是一个时间服务器程序,它能够提供当前时间信息。在描述中提到的使用方法,通过telnet命令连接到本地主机的8000端口,然后服务器会返回其系统的时间戳,这里显示的是"IRKT"时区(伊朗标准...
Libevent是一个事件驱动的库,用于实现高效的网络连接处理。Memcached依赖于libevent来处理客户端连接,并能够同时支持大量并发连接。理论上,Memcached可以处理无限数量的连接,但实际上,由于操作系统线程能力的...
在Linux操作系统环境下,构建一个媒体服务器是实现流媒体服务、视频点播或在线音频播放的关键。"linux-media-server-源码.rar"提供的源代码提供了这样的功能,让我们一起深入探讨其中涉及的技术和知识点。 1. **跨...
libevent是一个跨平台的事件通知库,它可以处理各种I/O事件,如网络连接、定时器等。 7. **http2-upload.c**: 这个例子专注于HTTP/2协议的上传操作。HTTP/2是一种更高效的网络协议,支持多路复用,可以显著提高页面...
在IT行业中,时间间隔求和服务器(time_interval_sum_server)是一种常见的系统设计概念,它用于实时处理和聚合数据流中的数值。在这个场景中,服务器需要能够接收来自不同源头的数字输入,并在指定的时间间隔内计算...
在Zabbix 4.0版本中,部署的基本原理主要包括以下几个方面: 1. **Zabbix Server**: 作为核心组件,负责收集来自各个代理的数据,并将其存储在数据库中。 2. **Zabbix Agent**: 运行在被监控主机上,用于收集本地...
下载zabbix server源码包 `wget -o zabbix-4.0.4.tar.gz 安装依赖 `yum install wget telnet ...
- ` Tracker_server`: 指定Tracker服务器的IP和端口,通常会有多个Tracker节点,用逗号分隔。 - `listen_port`: Storage节点监听的端口,客户端和Tracker通过此端口进行通信。 - `http_tracker_server`: 如果开启...
- **基于libevent的事件处理机制**:为了实现高并发性能,Memcached内部采用了libevent库来处理客户端连接上的读写事件,libevent是一个高效的跨平台事件处理框架,支持多种操作系统,如Windows、Linux、BSD和...
6. **测试**:运行编译后的服务,验证功能是否正常,可以尝试发布一个流或者连接到WebRTC服务器,看看能否成功传输音视频数据。 ZLMediaKit支持WebRTC意味着它可以与其他支持WebRTC的客户端(如Chrome、Firefox...
特拉维斯(Linux): ... sudo apt install libevent libboost-date-time-dev libboost-filesystem-dev libboost-system-dev libboost-locale-dev 在安装了所有必需的库之后,您可以编译源代码: mkdir
- **升级GCC版本**:GCC (GNU Compiler Collection) 是一个编译器集合,包含了C、C++等语言的编译器。对于Node.js的编译安装,推荐使用4.8.4及以上版本的GCC。 ```bash sudo apt-get update sudo apt-get ...