libevent
#include <stdio.h>
#include <event2/event.h>
#include <event2/bufferevent.h>
#define SERVER_PORT 8080
#define BUFFER_MAX 1024
struct event* eventList[1024];
void write_cb(evutil_socket_t sock, short events, void *arg);
void read_cb(evutil_socket_t sock, short events, void *arg);
void event_cb(struct bufferevent *bev, short event, void *arg)
{
if(event & BEV_EVENT_EOF)
{
bufferevent_free(bev);
}
}
void read_cb(evutil_socket_t sock, short events, void *arg)
{
char buffer[BUFFER_MAX] = {0};
int count = recv(sock, buffer, BUFFER_MAX, 0);
if(count <= 0)
{
// 跳出循环
//event_base_loopbreak((struct event_base*)arg);
event_del(eventList[sock]);
close(sock);
}
else
{
// 修改为写事件
printf("%s\n", buffer);
event_del(eventList[sock]);
eventList[sock] = event_new((struct event_base *)arg, sock, EV_WRITE | EV_PERSIST, write_cb, (struct event_base *)arg);
event_add(eventList[sock], NULL);
}
}
void write_cb(evutil_socket_t sock, short events, void *arg)
{
char buffer[BUFFER_MAX] = {0};
sprintf(buffer, "%s", "hellp libevent");
int count = send(sock, buffer, strlen(buffer), 0);
if(count < 0)
{
}
else
{
// 修改为读事件
event_del(eventList[sock]);
eventList[sock] = event_new((struct event_base *)arg, sock, EV_READ | EV_PERSIST, read_cb, (struct event_base *)arg);
event_add(eventList[sock], NULL);
}
}
void accept_cb(evutil_socket_t sock, short events, void *arg)
{
// 添加一个新的事件
struct sockaddr_in clienAddr;
socklen_t len = sizeof(clienAddr);
int clifd = accept((int)sock, (struct sockaddr*)&clienAddr, &len);
if(clifd == -1)
{
perror("accept");
return;
}
//evutil_make_socket_nonblocking(clifd);
// 将监听fd加入到事件集合
eventList[clifd] = event_new((struct event_base