当前位置:网站首页>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 .
边栏推荐
- ucore lab7 同步互斥 实验报告
- ucore lab1 系统软件启动过程 实验报告
- Investment operation steps
- Why can swing implement a form program by inheriting the JFrame class?
- Brief description of compiler optimization level
- pytest
- Threads and thread pools
- Global and Chinese markets of PIM analyzers 2022-2028: Research Report on technology, participants, trends, market size and share
- Rearrange spaces between words in leetcode simple questions
- Build your own application based on Google's open source tensorflow object detection API video object recognition system (I)
猜你喜欢
ucore lab8 文件系统 实验报告
What are the commonly used SQL statements in software testing?
Interface test interview questions and reference answers, easy to grasp the interviewer
Cadence physical library lef file syntax learning [continuous update]
Description of Vos storage space, bandwidth occupation and PPS requirements
接口测试面试题及参考答案,轻松拿捏面试官
Do you know the performance testing terms to be asked in the software testing interview?
[200 opencv routines] 98 Statistical sorting filter
转行软件测试必需要知道的知识
Keil5 MDK's formatting code tool and adding shortcuts
随机推荐
UCORE lab7 synchronous mutual exclusion experiment report
Global and Chinese markets of MPV ACC ECU 2022-2028: Research Report on technology, participants, trends, market size and share
Oracle foundation and system table
软件测试有哪些常用的SQL语句?
Nest and merge new videos, and preset new video titles
Mysql database (IV) transactions and functions
Interface test interview questions and reference answers, easy to grasp the interviewer
Global and Chinese market for antiviral coatings 2022-2028: Research Report on technology, participants, trends, market size and share
CSAPP homework answers chapter 789
With 27K successful entry ByteDance, this "software testing interview notes" has benefited me for life
Maximum nesting depth of parentheses in leetcode simple questions
What to do when programmers don't modify bugs? I teach you
What level do 18K test engineers want? Take a look at the interview experience of a 26 year old test engineer
How to solve the poor sound quality of Vos?
UCORE lab1 system software startup process experimental report
[pytorch] simple use of interpolate
How to do agile testing in automated testing?
软件测试面试要问的性能测试术语你知道吗?
Portapack application development tutorial (XVII) nRF24L01 launch B
Why can swing implement a form program by inheriting the JFrame class?