| 
 | 
 
#include <stdio.h> 
#include <sys/socket.h> 
#include <netinet/in.h>  
#include <arpa/inet.h>  
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/epoll.h> 
#include <string.h> 
int main(int argc,char *argv[]) 
{ 
        printf("This is begining...\n"); 
        int server_sockfd, client_sockfd,listener;  
        int server_len, client_len,nfds,epollfd;  
        struct sockaddr_in server_address;  
        struct sockaddr_in client_address; 
        epollfd=epoll_create(100); 
        if(epollfd<0) 
        { 
                printf("epoll create failue\n"); 
                exit(1);                 
        } 
        printf("create %d\n",epollfd); 
        server_sockfd = socket(AF_INET, SOCK_STREAM, 0); 
        server_address.sin_family=AF_INET;  
        server_address.sin_addr.s_addr=htonl(INADDR_ANY); 
        server_address.sin_port=htons(9734);  
        server_len=sizeof(server_address);  
        client_len=sizeof(client_address); 
         
        if(bind(server_sockfd,(struct sockaddr *)&server_address,server_len)!=0) 
        { 
                printf("There are wrong for socket and port!\n"); 
                exit(1); 
        } 
        listener=listen(server_sockfd,64);         
        if(listener!=0) 
        { 
                printf("listen is wrong!\n"); 
                exit(1); 
        } 
        struct epoll_event ev; 
        client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_address,&client_len); 
    if(client_sockfd < 0) 
        { 
                perror("accept"); 
        exit(1); 
    } 
        ev.events = EPOLLIN | EPOLLET; 
    ev.data.fd = client_sockfd; 
         
        printf("Use epoll_ctl\n"); 
        int n=epoll_ctl(epollfd, EPOLL_CTL_ADD, client_sockfd, &ev); 
         
        if ( n < 0)  
        { 
        fprintf(stderr, "epoll set insertion error: fd=%d\n",client_sockfd); 
        return -1; 
    } 
        printf("hehe %d\n",client_sockfd); 
        printf("hahahah %d\n",ev.data.fd); 
        while(1)  
        { 
                struct epoll_event *events; 
                nfds = epoll_wait(epollfd, (struct epoll_event *)events, 1, 1000); 
                switch(nfds) 
                {                         
                        case 0: 
                                printf("No event .. timout instead\n"); 
                                exit(1); 
                                //break; 
                        case -1: 
                                break; 
                        default: 
                                if(events[0].data.fd==client_sockfd) 
                                { 
                                        char buffer[2048],data[2048]="This is test!";         
                                        recv(client_sockfd,(void *)buffer,2048,NULL); 
                                        printf("%s\n",buffer); 
                                        send(client_sockfd,(void *)data,2048,NULL); 
                                        printf("Server wait the next...");                                 
                                        strcpy(buffer,""); 
                                        strcpy(data,""); 
                                        fflush(stdout);                         
                                } 
                                break; 
                } 
        } 
        return 0; 
} 
是一个socket程序,但是用到了内核的加速补丁epoll,可是当epoll_wait始终等待不到任务,导致每次都是返回0。这样我应该怎么去改呢,在网上找遍了也没找到解决的办法。 |   
 
 
 
 |