libevent 的用法

最近在写项目的时候用到了libevent 发现有些不会用 现在总结一下 
   1 #include <stdio.h>
  2 #include <iostream>
  3 #include <sys/types.h>
  4 #include <sys/socket.h>
  5 #include <netinet/in.h>
  6 #include <assert.h>
  7 #include <stdlib.h>
  8 #include <json/json.h>
  9 #include <arpa/inet.h>
 10 #include <event.h>
 11 #include <unistd.h>
 12 #include "fangfa.h"
 13 #include "my_mysql.h"
 14 #include "leixing.h"
 15 using namespace std;
 16 void onread(int c,short event,void *arg)
 17 {
 18     printf("endl\n");
 19     char buff[100]={0};
 20     recv(c,buff,100,0);
 21     printf("%s\n",buff);
 22 
 23 }
 24 void onAccept(int fd,short event,void *arg)
 25 {
 26     struct sockaddr_in bddress;
 27     socklen_t len=sizeof(bddress);
 28     //cout<<"endl"<<endl;
 29     struct event *event_t;
 30     struct event_base*base=(struct event_base*)arg;
 31     int c=accept(fd,(struct sockaddr*)&bddress,&len);
 32     cout<<"end"<<endl;
 33     event_t=event_new(base,c,EV_READ|EV_PERSIST,onread,NULL);
 34     event_add(event_t,NULL);
 35 //  event_base_dispatch(base);
 36 }

37 int main()
 38 {
 39     int sockfd=socket(AF_INET,SOCK_STREAM,0);
 40     struct sockaddr_in address;
 41     address.sin_family=AF_INET;
 42     address.sin_port=htons(6000);
 43     address.sin_addr.s_addr=inet_addr("127.0.0.1");
 44     int ret=bind(sockfd,(struct sockaddr*)&address,sizeof(address));
 45     assert(ret!=-1);
 46     ret=listen(sockfd,5);
 47     struct event_base* base=event_init();
 48     struct event *event_t=event_new(base,sockfd,EV_READ|EV_PERSIST,onAccept,    base);
 49     event_add(event_t,NULL);
 50     event_base_dispatch(base);
       51     //struct event evListen;
 52     //event_set(&evListen,sockfd,EV_READ|EV_PERSIST,onAccept,NULL);
 53     //event_base_set(base,&evListen);
 54     //event_add(&evListen,NULL);
 55     //event_base_dispatch(base);
 56 }

有些尴尬 只有这个过了 能连接多个客户端  简单介绍一下 在libevent 底层有一些io复用的技术 为什么用libevent 首先如果直接写epoll 那也比较麻烦 其次不知道 你自己写的高不高效 言归正传

我一开始 是直接创建了2个base 发现 两次调用event_base_dispatch(base)

发现最多只能连接一个客户端 

其实 event_base_dispatch  这个事件循环只要一个就行这个就相当于一个监听的fd的一个函数一旦有事件那么就直接调用你绑定的回调函数里面 比如你是sockfd -》onaccept

你是c—》onread 函数 因为都是绑定在同一个base里面的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值