08libevent 라이브러리에있는 통신 서버 및 클라이언트의 주요 기능

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 连接完成之后可以向输出缓冲区添加数据

클라이언트의 기능은 상대적으로 간단하며이 두 기능을 통해 통신합니다.

추천

출처blog.csdn.net/weixin_44517656/article/details/108781638