ChinaUnix.net
相关文章推荐:

socket EAGAIN

转载自 newnlcloud 最终编辑 newnlcloud   在Linux中使用非阻塞的socket的情形下。 (一)发送时 当客户通过socket提供的send函数发送大的数据包时,就可能返回一个EGGAIN的错误。该错误产生的原因是由于send 函数中的size变量大小超过了tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在kernel中缓存的数据量。当应用程序在socket中设置了O_NDELAY或者O_NONBLOCK属性后,如果发送缓存被占满,send就会返回EAG...

by netfan - Linux环境编程 - 2011-12-20 17:28:19 阅读(1423) 回复(0)

相关讨论

本帖最后由 forward_ding 于 2012-06-26 10:35 编辑 问题一、 请教下:为send设置了不经历由系统缓冲区到socket缓冲区的拷贝,这跟不设置有什么不同(除了网络上说的性能提升外)? 数据经过系统缓冲区有什么好处? 问题二、 我现在程序有个问题:很容易出现eagain(资源暂时不可用),程序用的是libevent封装的epoll,按照网上的说法有三种解决方法: 1.调大tcp_sendspace,使之大于send中的size参数。 但我觉得生产机参数...

by forward_ding - C/C++ - 2013-06-24 10:26:08 阅读(5360) 回复(13)

socket程序两台主机通信,建立连接后一端读取文件并发送,另一端接收并写入文件,如果文件稍微大了一点,接收端报eagain的错误,但是只要接受端不写文件的话就没有这个错误,是不是solaris对资源的使用有什么限制,有遇到这种问题吗?

by channelV - Solaris - 2004-01-09 16:26:09 阅读(1185) 回复(2)

socket程序两台主机通信,建立连接后一端读取文件并发送,另一端接收并写入文件,如果文件稍微大了一点,接收端报eagain的错误,但是只要接受端不写文件的话就没有这个错误,是不是solaris对资源的使用有什么限制,有遇到这种问题吗?

by channelV - Solaris - 2004-01-09 16:26:09 阅读(3096) 回复(2)

遇到这两个错误时,需要继续循环读。 eagain还好理解点。 EINTR 为啥需要继续读?遇到中断信号,进程都停掉了,为何还要循环读? ps,还有哪些错误需要继续循环读?

by zhendehaoren - C/C++ - 2014-07-24 15:29:12 阅读(2430) 回复(4)

这两天做测试,发现在高并发情况下,semop()操作经常会返回eagain(Resource temporarily unavailable)。 相关的手册对此的解释是: [RedHat Linux] eagain An operation could not proceed immediately and either IPC_NOWAIT was asserted in its sem_flg or the time limit specified in time-out expired. [UnixWare] The operation would result in suspension of the calling process but (sem_flg&IPC_NOWAIT) is true. ...

by sunlan - C/C++ - 2005-01-18 11:59:17 阅读(3713) 回复(8)

本帖最后由 larkinboy 于 2010-10-08 20:52 编辑 [code]while(rs) { buflen = recv(activeevents.data.fd, buf, sizeof(buf), 0); if(buflen < 0) { // 由于是非阻塞的模式,所以当errno为eagain时,表示当前缓冲区已无数据可读 // 在这里就当作是该次事件已处理处. if(errno == eagain) break; else // 这里是什么呢? return; } else if(buflen == 0)...

by larkinboy - C/C++ - 2010-10-08 21:30:37 阅读(3261) 回复(4)

一个进程,当它不是精灵进程时,和主程序通讯正常,变为精灵进程后,给主程序发送一个包,主程序可正常接收,主程序给该精灵进程返回应答包时,精灵进程recv()时总出现eagain,怎么回事呢?

by boldeagle - C/C++ - 2009-07-21 17:59:47 阅读(3983) 回复(12)

在solaris9下第一次调用pthread-create就返回eagain,这是为什么呢?但是在redhat9下就没问题!

by mike_chen - C/C++ - 2005-08-30 09:29:36 阅读(1754) 回复(1)

各位大侠帮着看一下是什么问题啊,在linux上有时会陷入select成功然后recvfrom返回eagain的死循环。 struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; fd_set read_set; FD_ZERO(&read_set); FD_SET(m_udp_fd, &read_set); int result = select(m_udp_fd + 1, &read_set, NULL, NULL, &tv); if (result < 0) { ERROR_LOG("ERROR: select() failed, errno: %d, reason: %s", ...

by luischeng - C/C++ - 2011-03-07 11:06:43 阅读(4201) 回复(5)

我在HP-UX和Solaris下都碰到了这个问题: 并发用stat取文件属性时,会返回eagain错误。 大家碰到过吗,有没有不返回这个错误的类似stat的函数?

by iclinux - C/C++ - 2005-07-05 09:44:02 阅读(813) 回复(0)