测试使用libevent创建服务器,并且能够正常接收到socket连接回调

/***
* @projectName  libevent_test_server
* @brief        功能介绍:测试使用libevent创建服务器,并且能够正常接收到socket连接回调
* @param        参数说明
* @return       返回值说明
* @note         使用注意事项
*/

#include <iostream>
#include <event2/event.h>
#include <event2/listener.h>
using namespace std;

#define SPORT 5001

void listen_cb(struct evconnlistener *e, evutil_socket_t s, struct sockaddr *a, int socklen, void *arg)
{
	cout << "listen_cb" << endl;
}

int main()
{
#ifdef _WIN32
	//初始化socket库,在做windows socket函数的时候需要初始化
	WSADATA wver;
	WSAStartup(MAKEWORD(2, 2), &wver);
#else
	//忽略关掉信号,发送数据给已关闭的socket,避免程序crash
	if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
		return 1;
#endif // 

	std::cout << "test libevent!\n";

	//创建libevent的上下文
	event_base* base = event_base_new();
	if (base)
	{
		std::cout << "event_base_new success!" << std::endl;
	}

	//监听端口
	//socket创建,bind连接,listen监听
	sockaddr_in sin;
	memset(&sin, 0, sizeof(sin));
	sin.sin_family = AF_INET;
	sin.sin_port = htons(SPORT);
	evconnlistener *ev = evconnlistener_new_bind(
		base,										//libevent的上下文
		listen_cb,									//接收到连接的回调函数
		base,										//回调函数获取的参数arg
		LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE,	//LEV_OPT_REUSEABLE - 地址重用;LEV_OPT_CLOSE_ON_FREE - listen关闭同时关闭socket
		10,											//连接队列大小,对应listen函数,最大缓冲队列,没来得及处理的连接最大数量
		(sockaddr*) &sin,							//绑定的地址和端口
		sizeof(sin)
		);

	//事件分发处理
	if(base)
		event_base_dispatch(base);
	if(ev)
		evconnlistener_free(ev);

	if(base)
		event_base_free(base);

#ifdef _WIN32
	WSACleanup();
#endif // _WIN32


	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值