Linux 网络通信 Epoll 管理.

仙境之桥2046 2013-07-05 09:48:28
在做网络通信服务器端的时候.

采用了Epoll监控描述符的方式.

求解:
客户端连上服务器的时候,有2两个recv,length ==0,且errno ==EINTR,EWOULDBLOCK ,EAGAIN

当客户端正常关闭链接推出时,Epoll也会检测到一些链接,length =-1

采用的非阻塞模式

希望有对epoll和网络通信熟悉的帮忙解答下.

if((events[i].events&EPOLLIN)&&(ev->events&EPOLLIN))
{
if(listenfd == ev->fd)
{
epollserver.AcceptConn(listenfd, 0, NULL);

//链接推送
//int nTempFd =epollserver.GetTempFd();
//printf("nTempFd:%d\n", nTempFd);
//cPthreadPool.pool_add_work(&push,&nTempFd);
}
else
{
//向线程池内增加工作任务
printf("cPthreadPool.pool_add_work()\n");
cPthreadPool.pool_add_work(&func,ev);
}
}


epoll部分代码
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
仙境之桥2046 2013-07-22
  • 打赏
  • 举报
回复
引用 3 楼 romyyao 的回复:
加上关注EPOLLHUP,连接关闭时会同时产生 EPOLLIN|EPOLLHUP|EPOLLERR 事件的
能说的仔细点吗?
romyyao 2013-07-09
  • 打赏
  • 举报
回复
加上关注EPOLLHUP,连接关闭时会同时产生 EPOLLIN|EPOLLHUP|EPOLLERR 事件的
仙境之桥2046 2013-07-08
  • 打赏
  • 举报
回复
引用 1 楼 qq120848369 的回复:
read=0表示对方发来FIN,说明对方关闭了连接写。 read=-1,但errno==EINTR or EAGAIN说明没什么事。 read=01,但errno不等于上面两个,那就出问题了,连接坏了。
恩 关键是现在我不想让我的epoll管理处理 -1这个
qq120848369 2013-07-06
  • 打赏
  • 举报
回复
read=0表示对方发来FIN,说明对方关闭了连接写。 read=-1,但errno==EINTR or EAGAIN说明没什么事。 read=01,但errno不等于上面两个,那就出问题了,连接坏了。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧