博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
epoll+socket实现 socket并发 linux服务器
阅读量:7165 次
发布时间:2019-06-29

本文共 1683 字,大约阅读时间需要 5 分钟。

/* 实现功能:通过epoll, 处理多个socket * 监听一个端口,监听到有链接时,添加到epoll_event * xs */ #include 
#include
#include
#include
#include
#include
#include
#include
#define MYPORT 12345 //最多处理的connect#define MAX_EVENTS 500 //当前的连接数int currentClient = 0; //数据接受 buf#define REVLEN 10char recvBuf[REVLEN]; //epoll描述符int epollfd;//事件数组struct epoll_event eventList[MAX_EVENTS]; void AcceptConn(int srvfd);void RecvData(int fd); int main(){ int i, ret, sinSize; int recvLen = 0; fd_set readfds, writefds; int sockListen, sockSvr, sockMax; int timeout; struct sockaddr_in server_addr; struct sockaddr_in client_addr; //socket if((sockListen=socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("socket error\n"); return -1; } bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(MYPORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //bind if(bind(sockListen, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { printf("bind error\n"); return -1; } //listen if(listen(sockListen, 5) < 0) { printf("listen error\n"); return -1; } // epoll 初始化 epollfd = epoll_create(MAX_EVENTS); struct epoll_event event; event.events = EPOLLIN|EPOLLET; event.data.fd = sockListen; //add Event if(epoll_ctl(epollfd, EPOLL_CTL_ADD, sockListen, &event) < 0) { printf("epoll add fail : fd = %d\n", sockListen); return -1; } //epoll while(1) { timeout=3000; //epoll_wait int ret = epoll_wait(epollfd, eventList, MAX_EVENTS, timeout); if(ret < 0) { printf("epoll error\n"); break; } else if(ret == 0) { printf("timeout ...\n"); continue; } //直接获取了事件数量,给出了活动的流,这里是和poll区别的关键 int i = 0; for(i=0; i

转载地址:http://qmtwm.baihongyu.com/

你可能感兴趣的文章