- 3
- 0
- 约5.79千字
- 约 15页
- 2019-12-02 发布于湖北
- 举报
Libevent简介;;使用Libevent的基本流程;Libevent对事件的处理流程;Libevent buffer实现异步传输;;示例程序一:;//on_write函数中向客户端回写数据
void on_write(int sock, short event, void* arg)
{
char* buffer = (char*)arg;
send(sock, buffer, strlen(buffer), 0);
free(buffer);
}
//读事件
void on_read(int sock, short event, void* arg)
{
struct event* write_ev;
int size;
struct sock_ev* ev = (struct sock_ev*)arg;
ev-buffer = (char*)malloc(MEM_SIZE);
bzero(ev-buffer, MEM_SIZE);
size = recv(sock, ev-buffer, MEM_SIZE, 0);
printf(receive data:%s, size:%d\n, ev-buffer, size);
//当从socket读返回0标志对方已经关闭了连接,因此这个时候就没必要继续监听该套接口上的事件
if (size == 0) {
release_sock_event(ev);
close(sock);
return;
}
//传参给on_write 准备写时间
event_set(ev-write_ev, sock, EV_WRITE, on_write, ev-buffer);
event_base_set(base, ev-write_ev);
event_add(ev-write_ev, NULL);
}
;
void on_accept(int sock, short event, void* arg)
{
struct sockaddr_in cli_addr;
int newfd, sin_size;
struct sock_ev* ev = (struct sock_ev*)malloc(sizeof(struct sock_ev));
//之所以是在堆申请内存,是防止在栈分配而导致的访问未知内存而使得程序崩溃
ev-read_ev = (struct event*)malloc(sizeof(struct event));
ev-write_ev = (struct event*)malloc(sizeof(struct event));
sin_size = sizeof(struct sockaddr_in);
//创建新的套接字进行连接,sock是正在监听连接的套接字,而中间参数则是客户端的地址信息
newfd = accept(sock, (struct sockaddr*)cli_addr, sin_size);
//在newfd文件描述符上监听可读事件,如果有数据到达则调用on_read函数
event_set(ev-read_ev, newfd, EV_READ|EV_PERSIST, on_read, ev);
event_base_set(base, ev-read_ev);
event_add(ev-read_ev, NULL);
};
int main(int argc, char* argv[])
{
//创建一个套接字地址对象
struct sockaddr_in my_addr;
int sock;
//创建套接字描述符,实质是一个文件描述符
//AF_INET表示使用IP地址,SOCK_STREAM表示使用流式套接字
sock = socket(AF_INET, SOCK_STREAM, 0);
int yes = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, yes, sizeof(int));
memset(my_addr, 0, sizeof(my_addr));
//实例化对象的属性
my_addr.sin_family = AF_INET;//主机字节顺序
my_addr.sin_port = htons
您可能关注的文档
- HFC网络光纤系统设计(唐明光).ppt
- HCSCA104 HCNA-Security-CBSN 第四章 网络地址转换技术.ppt
- Hibernate连接数据库框架.ppt
- Hadoop数据挖掘工具Mahout.ppt
- HIS程序部署及运行原理.ppt
- HKWL091502电流做功的快慢[1].ppt
- HK601整机设计说明(1203).ppt
- HIS、LIS系统常见问题及操作.ppt
- HFSS软件使用基础介绍.pptx
- hm1.3《电场强度》(PPT课件可编辑).ppt
- 2025年全国演出经纪人员资格认定考试试卷带答案(研优卷).docx
- 2025年全国演出经纪人员资格认定考试试卷完整版.docx
- 2025年全国演出经纪人员资格认定考试试题库及完整答案.docx
- 2025年全国演出经纪人员资格认定考试试卷完美版.docx
- 2025年全国演出经纪人员资格认定考试试卷含答案(实用).docx
- 2025年全国演出经纪人员资格认定考试试卷及答案(各地真题).docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
- 2025年全国演出经纪人员资格认定考试试卷及答案1套.docx
- 2025年下半年四川成都市郫都区面向社会引进公共类事业单位人员2人备考题库最新.docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
最近下载
- 人教版生物学选择性必修3全册教学课件.pptx
- 桑黄编制说明.doc VIP
- 2025年重庆市中考物理试卷真题(含答案解析).docx
- 数学试卷【新高考I卷】【山东卷】【高考真题】山东省2025年山东省普通高等学校招生全国统一考试(新I卷)(6.7-6.9).docx VIP
- 《上下五千年(六)》青少年教育文学丛书.pdf VIP
- 高考评价体系下基于核心素养素养2020年高考化学后期复习策略讲座.ppt VIP
- 《海上风电场工程风电机组基础设计规范》.pdf VIP
- 数学试卷答案【新高考I卷】【山东卷】【高考真题】山东省2025年山东省普通高等学校招生全国统一考试(新I卷)(6.7-6.9).docx VIP
- 复变函数1省公开课金奖全国赛课一等奖微课获奖课件.pptx VIP
- 316L 不锈钢收缩率实验报告.docx VIP
原创力文档

文档评论(0)