libevent 2 bufferevent 응용 예시

/*************************************************
 *      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; }

좋은 웹페이지 즐겨찾기