epoll-处理EPOLLIN事件 recv MSG_PEEK 返回 EAGAIN

问题描述

处理EPOLLIN事件 recv MSG_PEEK 返回 EAGAIN

处理EPOLLIN事件
n = recv(fd, buf, 1, MSG _ PEEK);
返回-1, errno是EAGAIN, 请问是怎么回事。
通过tcpdump看到的确是有数据来了

解决方案

参考:http://bbs.chinaunix.net/thread-1850751-1-1.html
http://bbs.csdn.net/topics/390335223

解决方案二:

http://stackoverflow.com/questions/3664537/nonblocking-socket-recv-problem-while-using-it-with-epoll上说
epoll_wait() only told you that there was a new socket to accept() - it did not tell you that there was data to read from the new socket.
真的是这样的吗?
为啥有数据epoll告诉有数据,(这里已排除对端close的情况,),调recv却还是EAGAIN. 这种情况在大量请求时仅出现过很少次。

解决方案三:

http://stackoverflow.com/questions/3664537/nonblocking-socket-recv-problem-while-using-it-with-epoll

时间: 2024-09-20 17:11:35

epoll-处理EPOLLIN事件 recv MSG_PEEK 返回 EAGAIN的相关文章

Linux网络编程 epoll中EPOLLIN EPOLLOUT信号无法触发

问题描述 Linux网络编程 epoll中EPOLLIN EPOLLOUT信号无法触发 比如 if(events[i].events&EPOLLIN) { int bytes_read=read(m_sockfd,read_buf,READ_BUFFER_SIZE); } 这样会触发EPOLLIN 但如果把read()封装到比如service类的sread()函数中 if(events[i].events&EPOLLIN) { service.sread() } 便不会触发EPOLLIN事

linux socket高性能服务器处理框架

思考一种高性能的服务器处理框架 1.首先需要一个内存池,目的在于: ·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题: ·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度: ·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于容器而言,处理固定块的分配和回收,相当 容易实现.当然,还要记得需要设计成线程安全的,自旋锁比较好,使用读写自旋锁就更好了. ·分配内容的增长管理是一个问题,比如第一次需要1KB空间,随着数据源源不断

nginx概念理解

Nginx是什么 代理服务器:一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用比如:GoAgent,翻墙神器.   一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接.或者获得目标服务器的指定资源. Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色.HTTP的代理服务器即是Web服务器又是Web客户端. 代理

iscsi target tgt架构

tgt是用户态实现的iscsi target,而iet(iscsi enterprise target)是在内核态实现的target,tgt相比于iet来说,因为其用户态实现,方便调试,新加入一些功能等,不过性能相比iet来说要稍差一点.下面就介绍一下tgt的程序框架(略过iscsi协议解析处理部分),以便于整体把握tgt的代码,方便后续的一些修改. 1.整体框架 这里借用tgt官网给出的一张图.   tgt中命令的操作,与initiator端的通信都是通过epoll来实现的,下面分别对这两部分

android监听返回按钮事件的方法_Android

本文实例讲述了android监听返回按钮事件的方法.分享给大家供大家参考.具体如下: 用户在点击手机的返回按钮时,默认是推出当前的activty,但是有时用户不小心按到返回,所以需要给用户一个提示,这就需要重写onkeydown事件,实现的效果如下: java代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.l

select-recv返回值问题和在while(recv())的返回值不一样

问题描述 recv返回值问题和在while(recv())的返回值不一样 if ((select(sockfd + 1), &readfd, NULL, NULL, &stime) > 0) { #if 1 nlen = recv(sockfd, pcBuffer, 199, 0); printf("recv num(%d), buffer num(%d). ", nlen, lRecvnum); if ((lRecvnum + nlen) < 199) {

jquery中获得$.ajax()事件返回的值并添加事件的方法_jquery

如果想获得$.ajax()中返回的值,直接用在success:funciton(){return xx} 是不可以的,要想获得xx的值,要在script中,使用全局变量.利用全局变量引出xx的值. jquery 取得$.ajax事件中的返回值,并添加事件 复制代码 代码如下: <html> <head> <title>测试JQUERY提交动态文本</title> <script language="javascript" src=&

在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是一笔带过一下,我们重点说下后半部分吧 一.Activity监听返回键 这个其实大家都知道,首先我们要了解流程,你要屏蔽这个返回键,那你就要拿到这个返回键的事件了,所以我们要监听了,而在Activity中,有两种做法,首先,系统是提供了返回键的监听的 /** * 返回键监听 */ @Override

python网络编程——IO多路复用之epoll

来源:http://www.cnblogs.com/maociping/p/5132583.html 1.内核EPOLL模型讲解     此部分参考http://blog.csdn.net/mango_song/article/details/42643971博文并整理     首先我们来定义流的概念,一个流可以是文件,socket,pipe等可以进行I/O操作的内核对象.不管是文件,还是套接字(socket),还是管道(pipe),我们都可以把他们看作流.     之后我们来讨论I/O操作,通