* @file server.c
* @brief epoll函数的服务器端
* @author chibaobao
* @version
* @date 2017-01-18
*/
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/epoll.h>
int ()
{
struct sockaddr_in serveraddr,cliaddr;
int cliaddr_len = sizeof(cliaddr);
int listenfd,connfd;
char buf[1024];
char str[INET_ADDRSTRLEN];
int i=0;
int efd;
listenfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(8880);
bind(listenfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
listen(listenfd,20);
struct epoll_event event;
struct epoll_event list_event[1024];
int res,len;
efd = epoll_create(10);
event.events = EPOLLIN;
event.data.fd=listenfd;
epoll_ctl(efd,EPOLL_CTL_ADD,listenfd,&event);
while(1)
{
res = epoll_wait(efd,list_event,1024,-1);
for(i=0;i<res;i++)
{
if(list_event[i].data.fd == listenfd)
{
connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&cliaddr_len);
printf("new conn:ip %s,port:%dn",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
event.data.fd=connfd;
epoll_ctl(efd,EPOLL_CTL_ADD,connfd,&event);
}
else if(list_event[i].events & EPOLLIN)
{
bzero(buf,sizeof(buf));
len = read(list_event[i].data.fd,buf,sizeof(buf));
if(len == 0)
{
epoll_ctl(efd, EPOLL_CTL_DEL, list_event[i].data.fd, NULL);
close(list_event[i].data.fd);
}
printf("str[%d]:#%s#n",i,buf);
}
}
}
}
近期评论