08libevent 라이브러리에있는 통신 서버 및 클라이언트의 주요 기능
以下是关于libevent学习的相关文章:
01 libevent 라이브러리 다운로드 및 설치 및 설치 성공 여부 테스트
02 libevent 라이브러리의 전체적인 프레임 워크 아이디어
03 libevent 에서 통신의 주요 기능
04 libevent 라이브러리 아래의 fifo가 통신 소켓으로 사용됨
05 libevent 라이브러리에서 보류 중 및 비 보류의 해석
06 libevent 에서 통신의 버퍼 이벤트 버퍼링 영역 기능 소개
07libevent bufferevent 이벤트의 라이브러리 관련 기능
08libevent 라이브러리 통신 서버 및 클라이언트 주요 기능
09libevent 라이브러리 서버 및 클라이언트 TCP 통신 프로세스 및 코드 예제
1 서버의 주요 기능
1) evconnlistener_new (),이 함수는 이해할 수 있고, 그 함수는 새로운 리스너 객체와 동일하며, 실제 패키지가 없습니다. 6fd를 보면 여전히 자신의 socket () 반환이 필요하다는 것을 알 수 있습니다. 값 전달 매개 변수. 따라서 주로 다음을 사용하십시오.
struct evconnlistener * evconnlistener_new(
struct event_base *base,
evconnlistener_cb cb, //监听到有连接过来后,触发该回调函数
void *ptr, //回调函数参数,一般传base,因为回调中要使用,但是却没有该base
unsigned flags, //可识别的标志位
int backlog, //相当于listen函数的监听数,-1默认使用最大值
evutil_socket_t fd //需要socket()的返回值,所以该函数基本很少用,因为封装后没省略多少步骤。
);
//flags:
//LEV_OPT_CLOSE_ON_FREE :BEV_OPT_CLOSE_ON_FREE 释放 bufferevent 时关闭底层传输端口,这将关闭底层套接字,释放bufferevent对象等。对比bufferevent_socket_new的参数3enum bufferevent_options options
//LEV_OPT_REUSEABLE:端口复用,选用多个flags时,可使用 "|"
2) evconnlistener_new_bind (),이 함수는 socket, bind, listen, accpet의 네 가지 함수와 동일하며 위보다 더 편리합니다.
struct evconnlistener *evconnlistener_new_bind(
struct event_base *base,
evconnlistener_cb cb, //监听到有连接过来后,触发该回调函数
void *ptr, //回调函数参数,一般传base,因为回调中要使用,但是却没有该base
unsigned flags, //看上面
int backlog,
const struct sockaddr *sa, //服务端地址
int socklen
);
3) 위 두 함수의 콜백 함수 유형
typedef void (*evconnlistener_cb)(
struct evconnlistener *listener, //上面函数的监听者返回值
evutil_socket_t sock, //用于通信的套接字cfd,不需要你管,libevent会帮你传参,你只需要在该回调函数中使用即可
struct sockaddr *addr, //上面的服务器地址
int len,
void *ptr //evconnlistener_new_bind的参数3,实际上这个回调函数的最后三个参数都是evconnlistener_new_bind的参数
);
4) evconnlistener_free 리스너 이벤트 객체 해제
void evconnlistener_free(struct evconnlistener *lev);
5) 리스너의 모니터링을 관리하고 리스너의 활성화 여부를 설정하며,이 두 기능의 연동을 통해 위험을 유발할 수있는 특정 위치에서 모니터링을 해제 한 후 위험이 종료 된 후 모니터링을 시작할 수 있습니다.
int evconnlistener_enable(struct evconnlistener *lev);
int evconnlistener_disable(struct evconnlistener *lev);
6) 리스너 이벤트의 콜백 함수 및 매개 변수를 재설정합니다.
void evconnlistener_set_cb(
struct evconnlistener *lev,
evconnlistener_cb cb,
void *arg
);
2 클라이언트의 주요 기능
1) bufferevent_socket_new, 사실 이전 기사에서 이미이 기능을 언급했습니다.
struct bufferevent *bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
2) connect 함수와 정확히 동일한 bufferevent_socket_connect (). 다음 참고는이 기능의 기능을 자세히 설명합니다.
int bufferevent_socket_connect(
struct bufferevent *bev, //上面的bufferevent对象
struct sockaddr *address, //服务端地址
int addrlen
);
//1 bufferevent 若未设置套接字,该函数将为其分配一个新的流套接字, 并且设置状态为非阻塞
//2 bufferevent 已设置套接字,调用 bufferevent_socket_connect() 将告知libevent 套接字还未连接,直到连接成功之前不应该对其进行读取或者写入操作。更好的维护了bufferevent缓冲的操作权限。
//3 连接完成之后可以向输出缓冲区添加数据
클라이언트의 기능은 상대적으로 간단하며이 두 기능을 통해 통신합니다.