|
#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。这样我应该怎么去改呢,在网上找遍了也没找到解决的办法。 |
|