libevent绑定、监听和读写数据

本文介绍了libevent库中如何进行网络监听和数据读写。首先讲解了如何使用evconnlistener_new_bind函数完成socket的创建、绑定和监听。接着详细阐述了libevent如何通过回调函数处理读写事件,特别是evconnlistener_cb和bufferevent_setcb的作用,以及它们在hello-world.c示例中的具体实现。
摘要由CSDN通过智能技术生成

1. 绑定和监听

在上一篇文章中,以epoll为例说到了事件机制,会按顺序调用init和dispatch这两个回调函数,但是,我们回忆一下网络编程的过程,首先是需要创建socket、绑定socket、监听socket的,但目前为止还并没有涉及到,再去看源代码,会发现里面有listener.c,这个文件里面就会去做创建socket的过程。

看evconnlistener_new_bind函数,如下:

struct evconnlistener *
evconnlistener_new_bind(struct event_base *base, evconnlistener_cb cb,
    void *ptr, unsigned flags, int backlog, const struct sockaddr *sa,
    int socklen)
{
   
 struct evconnlistener *listener;
 evutil_socket_t fd;
 int on = 1;
 int family = sa ? sa->sa_family : AF_UNSPEC;
 int socktype = SOCK_STREAM | EVUTIL_SOCK_NONBLOCK;

 if (backlog == 0)
  return NULL;

 if (flags & LEV_OPT_CLOSE_ON_EXEC)
  socktype |= EVUTIL_SOCK_CLOEXEC;

 //调用socket函数
 fd = evutil_socket_(family, socktype, 0);
 if (fd == -1)
  return NULL;

 //设置存货检测
 if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on))<0)
  goto err;

 //设置地址重用
 if (flags & LEV_OPT_REUSEABLE) {
   
  if (evutil_make_listen_socket_reuseable(fd) < 0)
   goto err;
 }

 //设置端口重用
 if (flags 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp加油站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值