server.c
#include <stdio.h>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
int main() {
struct sockaddr_in serveraddr ;
memset(&serveraddr,0,sizeof(serveraddr)) ;
serveraddr.sin_family = AF_INET ;
serveraddr.sin_port = htons(8000) ;
serveraddr.sin_addr.s_addr = 0 ;
int sockfd = socket(AF_INET,SOCK_STREAM,0) ;
bind(sockfd,(struct sockaddr*)&serveraddr, sizeof(serveraddr)) ;
listen(sockfd, 10) ;
int ep_fd = epoll_create(20) ;
struct epoll_event ev ;
ev.events = EPOLLIN ;
ev.data.fd = sockfd ;
epoll_ctl(ep_fd, EPOLL_CTL_ADD, sockfd , &ev) ;
struct epoll_event events[20] ;
int cur_sock_num = 1 ;
char recvbuf[1000] ;
while(1){
int event_n = epoll_wait(ep_fd,events ,cur_sock_num,-1) ;
int i = 0 ;
for (i = 0; i < event_n; i++) {
if(events[i].data.fd == sockfd){
int newsockfd = accept(sockfd,NULL,NULL) ;
ev.events = EPOLLIN ;
ev.data.fd = newsockfd ;
epoll_ctl(ep_fd, EPOLL_CTL_ADD, newsockfd , &ev) ;
cur_sock_num ++ ;
}else{
int recv_len = read(events[i].data.fd , recvbuf,1000) ;
recvbuf[recv_len] = 0 ;
printf("socket %d recv : %s\n", events[i].data.fd,recvbuf) ;
}
}
}
return 0;
}
转载:https://blog.csdn.net/qq1187239259/article/details/102595647
查看评论