libevent 2 bufferevent 응용 예시
1831 단어 socketlibeventbufferevent
/*************************************************
* libevent 、 POP3 .
*/
#include <event2/event.h>
#include <event2/util.h>
#include <event2/bufferevent.h>
// ip sockaddr , addrlen( )
struct sockaddr * make_sock_addr(const char *ip, int port, int *addrlen);
// socket , , 。
void bufferevent_read_callback(struct bufferevent *bufevt, void *arg)
{
static int i = 0;
char buf[1024];
// bufferevent ,
size_t sz = bufferevent_read(bufevt, buf, 1024);
printf("received bytes: %d
", sz);
if ( sz > 0 ) {
printf("received: %s
", buf);
}
// pop3
if ( i == 0 ) bufferevent_write(bufevt, "user user1
", 11);
else if ( i == 1 ) bufferevent_write(bufevt, "pass 12345678
", 14);
else if ( i == 2) bufferevent_write(bufevt, "list
", 5);
else bufferevent_disable(bufevt, EV_READ);
i++;
}
int main(int argc, char **argv)
{
int addrlen = 0;
struct sockaddr * paddr = make_sock_addr("10.1.1.201", 110, &addrlen);
int fd = socket(AF_INET, SOCK_STREAM, 0);
// event base bufferevent
struct event_base * evbase = event_base_new();
struct bufferevent * bufevt = bufferevent_socket_new(evbase, fd, 0);
// sock (bufferevent_read_callback),
// , 。
bufferevent_setcb(bufevt, bufferevent_read_callback, NULL, NULL, NULL);
bufferevent_enable(bufevt, EV_READ);
// ,
bufferevent_socket_connect(bufevt, paddr, addrlen);
event_base_dispatch(evbase);
if ( bufevt ) bufferevent_free(bufevt);
if ( evbase ) event_base_free(evbase);
if ( fd >= 0 ) { close(fd); }
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 구성 요소에서 소켓 이벤트 리스너가 여러 번 실행됩니다.기본적이지만 종종 간과되는 사이드 프로젝트를 하면서 배운 것이 있습니다. 이 프로젝트에는 단순히 두 가지 주요 부분이 포함되어 있습니다. 프런트 엔드: 반응 및 재료 UI 백엔드: Express, Typescript...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.