简易epoll模型
#include<iostream>
#include <netinet/in.h>
#include<sys/fcntl.h>
#include<sys/socket.h>
#include<sys/epoll.h>
#include<arpa/inet.h>
#include <unistd.h>using namespace std;#define IP "192.168.229.134"
#define PORT 8001int main()
{int sevfd = socket(AF_INET, SOCK_STREAM, 0);if(sevfd == -1){cout<<"创建套接子失败"<<endl;return 0;}struct sockaddr_in sevaddr;sevaddr.sin_family = AF_INET;sevaddr.sin_addr.s_addr = inet_addr(IP);sevaddr.sin_port = htons(PORT);int ret1 = bind(sevfd,(sockaddr*)&sevaddr,sizeof(sevaddr));if(ret1 == -1){cout<<"绑定IP和端口失败"<<endl;}listen(sevfd, 100);int epofd = epoll_create(1);if(epofd == -1){cout<<"epoll_create 失败"<<endl;}struct epoll_event event;event.events = EPOLLIN;event.data.fd = sevfd;epoll_ctl(epofd, EPOLL_CTL_ADD, sevfd, &event);struct epoll_event evs[1024];while(true){int nfds = epoll_wait(epofd, evs, 1024, 1);for(int i = 0;i < nfds;i++ ){if(evs[i].data.fd == sevfd){int clientfd = accept(sevfd,nullptr,nullptr);if(clientfd == -1){continue;}struct epoll_event ev;ev.events = EPOLLIN;ev.data.fd = clientfd;epoll_ctl(epofd, EPOLL_CTL_ADD, clientfd, &ev);}else {char buffer[1024];recv(evs[i].data.fd,buffer,1024,0);cout<<buffer<<endl;}}}close(sevfd);
}