原创 Socket的send函数在执行时报EAGAIN的错误](转载)

2009-5-31 18:10 5262 0 分类: MCU/ 嵌入式

//前言:原来调试曾碰到此问题,现在终于清楚了


 


Document #: 2811137I30000

Body:
Socketsend函数在执行时报EAGAIN的错误]

内容提要:

当客户通过Socket提供的send函数发送大的数据包时,就可能返回一个EGGAIN的错误。该错误产生的原因是由于send

函数中的size变量大小超过了tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在kernel中缓存的数据量。当应用程序在socket中设置了O_NDELAY或者O_NONBLOCK属性后,如果发送缓存被占满,send就会返回EAGAIN的错误。

为了消除该错误,有三种方法可以选择:
1.调大tcp_sendspace,使之大于send中的size参数
---no -p -o tcp_sendspace=65536

2.在调用send前,在setsockopt函数中为SNDBUF设置更大的值

3.使用write替代send,因为write没有设置O_NDELAY或者O_NONBLOCK <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 

文章评论0条评论)

登录后参与讨论
相关推荐阅读
gmy800101 2011-08-05 15:16
SDL
简介     titleSDL(Simple DirectMedia Layer)被广泛的用于许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发大奖的 文明:权利的召唤(Civilization...
gmy800101 2010-06-18 09:26
Cadence 怎么从原理图导出原理图库?
PCB可有导出各元器件的PCB库,原理图的各元器件封装库怎么导出来?谢谢了知道了,新建一个库,然后将design cache里的元器件拉到库里,OK了!...
gmy800101 2009-06-01 09:04
pin pair config
问题:一个网络连接到两个以上的芯片,只需要设置其中两个芯片之间的电气约束。比如CPU的地址线DA0 连接到DDR和FLASH,现在只需要设置CPU到DDR这段线的长度约束比如线长范围为995mil到1...
gmy800101 2009-05-27 14:10
堆是堆,栈是栈,转载
堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)...
gmy800101 2009-05-07 17:14
IS61SF12832 和IS61LF12832
前言:由于看了一张电路图,里面有IS61SF12832,网上找了资料,但是ISSI现在的网站上没有,看到有IS61LF12832这个片子,和前者差不多,所以就邮件问了ISSI 的技术支持,以下是Q&a...
广告
我要评论
0
0
广告
关闭 热点推荐上一条 /3 下一条