当前位置:网站首页>Brief introduction to libevent
Brief introduction to libevent
2022-07-06 15:15:00 【Work hard to become a c++ Engineer】
struct event *ev;
struct event *evennt_new(struct event_base *base,evutil_socket_t fd,short what,event_callback_fn cb;void *arg);
base:event_base_new() Return value .
fd : Bound to the event Upper File descriptor .
what: The corresponding event (r、w、e)
EV_READ once Read events
EV_WRTIE once Write events
EV_PERSIST Continue to trigger . combination event_base_dispatch Function USES , take effect .
cb: Once the event meets the listening conditions , Function of callback .
typedef void(*event_callback_fn)(evutil_socket_t fd, short,void *)
arg: The parameters of the callback function .
Return value : Successfully created event
int event_add(struct event *ev,const struct timeval *tv);
ev: event_new() The return value of .
tv:NULL
int event_del(struct event *ev);
ev:event_new() The return value of .
int event_free(struct event *ev);
ev:event_new() The return value of .
#include<event2/buffereevent.h>
struct bufferent *ev;
struct bufferevent *bufferevent_socket_new(struct event_base *base,evutil_socket_t fd,enum bufferevent_options options);
base: event_base
fd: Package to bufferevent Internal fd
options: BEV_OPT_CLOSE_ON_FREE
return : Successfully created bufferevent Event object .
void bufferevent_socket_free(struct bufferevent *ev);
contrast event:event_new(fd,callback); event_add() --- Hang up event_base On .
bufferevent_socket_new(fd) bufferevent_setcb(callback)
void bufferevent_setcb(struct bufferevent*bufev, bufferevent_data_cb reacb, bufferevent_data_cb writecb, bufferevent_data_cb eventcb , void *cbarg );
bufev:bufferevent_socket_new() Return value
readcb: Set up bufferevent Degree buffer , Corresponding callback read_cb{ bufferevent_read() Reading data }
writecb: Set up bufferevent Write buffer , Corresponding callback write_cb{ } --- To the caller , Send write success notification . Sure NULL
eventcb: Set event callback . Also can be transmitted NULL
typedef void(*bufferevent_data_cb)(struct bufferevent *bev,void*ctx);
void event_cb(struct bufferevent *bev, short events, void *cbarg)
{
.....
}
cbarg: The parameters used by the above callback function .
read Callback function type :
typedef void(*bufferevent_data_cb)(struct bufferevent *bev,void*ctx);
void read_cb(struct bufferevent *bev,void *cbarg)
{
.....
bufferevent_read(); ---read()
}
bufferevent_read() Prototypes of functions :
size_t bufferevent_read(struct bufferevent *bev, void *buf, size_t bufsize);
write Callback function type :
int bufferevent_write(struct bufferevent *bufev, const void*data,size_t size);
void bufferevent_enable(struct bufferevent *bufev, short events); start-up
events: EV_READ、EV_WRITE、EV_READ|EV_WRITE
Default 、write buffer enable、read The buffer is disable
bufferent_enable(event,EV_READ); -- Turn on the read buffer
socket();bind();listen();accept();
struct evconnlistener *listner
struct evconnlistener *evconnlistener_new_bind(
struct event_base *base,
evconnlistener_cb cb,
void *ptr,
unsigned flags,
int backlog,
const struct sockaddr *sa,
int socklen);
base:event_base
cb: Callback function . Once called back , Explain that it should be completed internally with the client , Data reading and writing operations , communicate .
ptr: The parameters of the callback function
flags:LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE
backlog:listen() 2 ginseng . -1 Table max
sa: The server's own address structure
socklen: The size of the server's own address structure .
Return value : Successfully created listener .
socket(); connect();
int bufferevent_socket_connect(struct bufferevent *bev, struct sockaddr *address, int addrlen);
bev:bufferevent Event object ( Encapsulates the fd)
address、len: Equate to connect() ginseng 2/3
- 1. establish event_base
- 2. establish bufferevent Event object .bufferevent_socket_new();
- 3. Use bufferevent_setcb() Function gives bufferevent Of read、write、event Set the callback function .
- 4. When the monitored event is satisfied ,read_cb Will be called , Inside it bufferevent_read(); read
- 5. Use evconnlistener_new_bind Create a listening server , Set its callback function , When a client successfully connects , This callback function will be called .
- 6. encapsulation listner_cb() Inside the function . Complete communication with the client .
- 7. Set the read buffer 、 Write buffered Enable state enable、disable
- 8. Start cycle event_base_dispath();
- 9. Release the connection
- 1. establish event_base
- 2. Use bufferevent_socket_new() Create a that communicates with the tracking server bufferevnet Event object
- 3. Use bufferevent_socket_connect() Connect The server
- 4. Use bufferevent_setcb() to bufferevnet Object's read、write、event Set callback
- 5. Set up bufferenet Object's read / write buffer enable/disable
- 7. Start cycle event_base_dispath();
- 8. Release the connection

- 1.getline() obtain http The first line of the agreement .
- 2. Split... From the first line GET、 file name 、 Protocol version . Get the file name requested by the user .
- 3. Judge whether the file exists .stat()
- 4. Determine file or directory .
- 5. It's a document --open--read -- Write to the browser
- 6. First write http Reply protocol header :http/1.1 200 ok
- 7. Write file data .
边栏推荐
- 软件测试面试要问的性能测试术语你知道吗?
- pytest
- The minimum number of operations to convert strings in leetcode simple problem
- The latest query tracks the express logistics and analyzes the method of delivery timeliness
- Statistics 8th Edition Jia Junping Chapter 1 after class exercises and answers summary
- Global and Chinese market of pinhole glossmeter 2022-2028: Research Report on technology, participants, trends, market size and share
- CSAPP家庭作業答案7 8 9章
- Zhejiang University Edition "C language programming experiment and exercise guide (3rd Edition)" topic set
- 软件测试工作太忙没时间学习怎么办?
- Thinking about three cups of tea
猜你喜欢
ucore lab7 同步互斥 实验报告
How to do agile testing in automated testing?
ucore lab6 调度器 实验报告
The latest query tracks the express logistics and analyzes the method of delivery timeliness
What is "test paper test" in software testing requirements analysis
Interface test interview questions and reference answers, easy to grasp the interviewer
Pedestrian re identification (Reid) - Overview
In Oracle, start with connect by prior recursive query is used to query multi-level subordinate employees.
MySQL development - advanced query - take a good look at how it suits you
软件测试行业的未来趋势及规划
随机推荐
Rearrange spaces between words in leetcode simple questions
Knowledge that you need to know when changing to software testing
Collection集合与Map集合
Report on the double computer experiment of scoring system based on 485 bus
UCORE lab8 file system experiment report
JDBC介绍
A method and implementation of using VSTO to prohibit excel cell editing
How to learn automated testing in 2022? This article tells you
ucore lab1 系统软件启动过程 实验报告
Maximum nesting depth of parentheses in leetcode simple questions
Build your own application based on Google's open source tensorflow object detection API video object recognition system (II)
How to transform functional testing into automated testing?
Emqtt distribution cluster and node bridge construction
The salary of testers is polarized. How to become an automated test with a monthly salary of 20K?
Mysql database (I)
What are the business processes and differences of the three basic business modes of Vos: direct dial, callback and semi direct dial?
基于485总线的评分系统双机实验报告
Programmers, how to avoid invalid meetings?
The minimum number of operations to convert strings in leetcode simple problem
UCORE lab1 system software startup process experimental report