sp;//服务处理 int clientFd;
sockaddr_in clientAddr;
socklen_t clientlen;
for(;;)
{
//等待epoll事件到来,最多取EVENT_ARR个事件
int nfds=epoll_wait(epFd,evs,EVENT_ARR,-1);
//处理事件
for(int i=0;i<nfds;i++)
{
if(evs[i].data.fd==serverFd&&evs[i].events&EPOLLIN)
{
//如果是serverFd,表明有新连接连入
if((clientFd=accept(serverFd,(struct sockaddr*)&clientAddr,&clientlen))<0)
{
printf("ACCEPT failed\n");
}
printf("Connect from %s:%d\n",inet_ntoa(clientAddr.sin_addr),htons(clientAddr.sin_port));
setnoblock(clientFd);
//注册accept()到的连接
ev.data.fd=clientFd;
ev.events=EPOLLIN|EPOLLET;
epoll_ctl(epFd,EPOLL_CTL_ADD,clientFd,&ev);
}
else if(evs[i].events&EPOLLIN)
{
//如果不是serverFd,则是client的可读
printf("client can write!\n");
if((clientFd=evs[i].data.fd)>0)
{
//查询空闲线程对
for(j = 0; j < THREAD_MAX; j++) {
if (0 == s_thread_para[j][0]) break;
}
if (j >= THREAD_MAX) {
fprintf(stder