新闻  |   论坛  |   博客  |   在线研讨会
Socket的send函数在执行时报EAGAIN的错误](转载)
mayer | 2009-06-02 18:32:13    阅读:3019   发布文章

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

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

 

Document #: 2811137I30000

Body:
Socket的send函数在执行时报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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客