sendmsg: no buffer space available
今天在将项目从虚拟机上移植到真实机器上面的时候,发现问题,总是不成功,最后判断是userspace的程序没有向kernel发送消息成功,因为无法触发kernel的行为,但是userspace显示正常。
这个问题好像两个月之前,netlink模块测试的时候遇到过这个问题,当时加上sleep就好了,同样复制这个方法,发现使用usleep(1)就解决问题了。
接下来分析问题的原因,问题锁定在sendmsg上面。
查看sendmsg的返回值,发现是-1,也就是说sendmsg失败了,看errno: ENOBUFS。
| ENOBUFS The output queue for a network interface was full. This generally indicates that the interface has stopped sending, but may be caused by transient conges- tion. (Normally, this does not occur in Linux. Packets are just silently dropped when a device queue overflows.) |
也就是说发送队列占满了,怎么会出现出现这样的问题呢?
追踪sendmsg函数:
sys_sendmsg()
| ...... err = -ENOBUFS; if (msg_sys.msg_controllen > INT_MAX) ...... |
发现在sys_sendmsg中会引用一些msg中的成员变量,一些变量很大导致返回ENOBUFS错误,最终导致no buffer space available。
看我们的userspace代码:
| struct msghdr msg;
msg.msg_name = (void *)&dest_addr; |
OMG,竟然没有初始化,这样的话,msg.msg_controllen就有可能比较大,导致出现ENOBUFS错误。
解决方法就是初始化msg:
| memset(&msg, 0 ,sizeof(msg)); |
注意:在调试内核相关程序的时候,一定要检查返回值,一定要进行初始化,不要想当然。有些编译器会帮你初始化,但是有些不会,程序员不能够依赖编译器来干活 :-)
sendmsg: no buffer space available的更多相关文章
- ORA-27300: OS system dependent operation:sendmsg failed with status: 105 ORA-27301: OS failure message: No buffer space available
早上查看数据库alert日志,发现如下ORA-报错: kgxpvfynet: mtype: 61 process 6460 failed because of a resource problem i ...
- socket-详细分析No buffer space available
关键词:socket,tcp三次握手,tcp四次握手,2MSL最大报文生存时间,LVS,负载均衡 新年上班第一天,突然遇到一个socket连接No buffer space available的问题, ...
- java.net.SocketException: No buffer space available
https 访问url在调用量不大的情况下 java.net.SocketException: No buffer space available (maximum connections reach ...
- paip java.net.SocketException No buffer space available的解决办法及总结
java.net.SocketException No buffer space available的解决办法及总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...
- socket-详细分析No buffer space available(转)
新年上班第一天,突然遇到一个socket连接No buffer space available的问题,导致接口大面积调用(webservice,httpclient)失败的问题,重启服务器后又恢复了正 ...
- java socket / No buffer space available
s https://www.cnblogs.com/yiwangzhibujian/p/7107785.html Socket用在哪呢,主要用在进程间,网络间通信. https://www.cnblo ...
- log buffer space等待事件
最近,我们有台服务器在delete操作期间发现一直在等待log buffer space,其他节点就没与这个问题.经查,向重做缓冲区上写入重做记录的进程,为了确保拥有重做缓冲区内必要的空间,需要获得r ...
- 连接db2数据库出现No buffer space available (maximum connections reached?)
Caused by: javax.naming.NamingException: [jcc][t4][2043][11550][3.57.82] 异常 java.net.SocketException ...
- error:No buffer space available (maximum connections reached
2015-02-02 17:49:09,035 ERROR basic.DBManager - Failded to establish the connection. com.mysql.jdbc. ...
随机推荐
- motan源码分析六:客户端与服务器的通信层分析
本章将分析motan的序列化和底层通信相关部分的代码. 1.在上一章中,有一个getrefers的操作,来获取所有服务器的引用,每个服务器的引用都是由DefaultRpcReferer来创建的 pub ...
- HTML学习笔记之二(回到顶部 与 回究竟部)
回到顶部 回究竟部 回到顶部的俩种方式 一.使用js $('html, body').animate({ scrollTop: 0 }, 'fast');//带动画 $('html,body').sc ...
- boost 特点
功能强大 跨平台 开源 免费 构造精巧 C++扩展库
- yii cgridview 对生成的数据进行分页
这个其实最简单 在对应的model里找Search方法 找到后,参见如下代码 public function search() { // @todo Please modify the followi ...
- noip 2005 等价表达式
/* 开始想的是 维护a的每个指数的系数 然而不好办 然而还有^10^10^10这种数据 特殊值带入吧 多搞几个素数 接下来就是玄学的事了 给a赋值之后 就是简单地表达式求值 虽然思路简单 但是字符串 ...
- Android开发中在一个Activity中关闭另一个Activity
比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 Ac ...
- 数据转换错误,java.lang.NumberFormatException: null
今天写项目时报了一个数组转换错误的异常,让我找了半天5555 -_- . 一般出现这种错误呢,情况都是parseInt转换所触发的,像下面这行代码 int factorOneInt = Integer ...
- 关于oracle dblink的知识。
create database link WZGLconnect to MMCSG_GX(用户名)using '(description=(address_list=(address=(host=xx ...
- CentOS重启与关机
Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1.reboot 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 1 ...
- (二)Knockout - ViewModel 的使用
计算属性 实际应用中,我们通常需要对数据进行加工 如: 指定日期格式,将数字相加... 等,此时可使用ko.computed().当数据发生改变是,KO会使用computed重新计算 DEMO1 更改 ...