当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : epoll事件的处理
帖子发表于 : 2008-09-17 16:45 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
如何判断epoll事件,并做出相应的处理
假若我是客户端,想通过epoll轮询I/O事件
然后进行相应的接发数据
epollfd=epoll_create()
epoll_ctl(epollfd,EPOLL_CTL_ADD,sockfd,&ev)
nfdsepoll_wait(epollfd,events,30,-1);
for(;;){
for(i=0;i<nfds;i++){
if(events[i].events&EPOLLIN){
int err=recv(cli_sockfd,buff,100,0);
if(-1==err&& errno == EAGAIN){
fprintf(stderr,"读取数据失败%s\n",strerror(errno));
continue;

}else if (err==0){
perror(" 服务器已经断开,结束连接\n");
close(cli_sockfd);
close(epoll_fd);
time_to_exit=0;
_exit(0);
}else{
buff[err]='\0';
printf("接收到的数据为:%s\n",buff);
}
}
if(events[i].events&EPOLLOUT){
char send_buff[100];
printf("请输入要发送的信息(以'quit'来结束发送信息)\n");
scanf("%s",send_buff);
if(strlen(send_buff)==4&&(strncmp(send_buff,"quit",4)==0)){
time_to_exit=0;
perror("您按了退出键,系统推出\n");
close(cli_sockfd);
close(epoll_fd);
_exit(0);
}else{
if(send(cli_sockfd,send_buff,strlen(send_buff)+1,0)==-1){
perror("数据发送失败,请重新发送!\n");
continue;
}

}
按照这种方式接发数据的话,假设先接收数据,接收成功,然后开始发送数据,在发送数据期间若有数据传过来的话,不能及时接收,只有当把数据发送出去回过偷来才能接收数据


我感觉、这样用epoll肯定是错误的,有哪位高人对这个有了解,希望指教
就是如何用epoll轮询socket收发事件,因该如何处理相应的事件
谢谢


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译