- 论坛徽章:
- 0
|
很久前曾经在添加ieee80211模块到 ucd-snmp 时, 遇到过两个问题:
1. 一次设置会造成无线程序(madwifi或者hostapd)重启多次;
2. set时, 如果第一个值为"abcdefg", 第二个为"mm", 则第二次实际设置下去的不是"mm", 而是"mmcdefg".
费了很大的精力才解决了这两个问题; 结果最近在另外一个项目中添加同样的功能时又发现了这两个问题, 找以前的改动费了很大的力气也没找到, 结果又不得不用了好几天才找到了同样的解决方法. 郁闷之下, 终于想要记录下来备忘:
1. 原因:由于agent的回复不够及时, 导致nms在收不到答复时重新发送set请求, 以致于实际发送了5个set请求, 导致无线程序多次重启.
解决办法: 将需要运行很久的程序放到后台运行. 典型的情况是system调用,此时关键就是如下接近末尾的"&"符号, 这样可以使得agent及时返回:
system("/etc/init.d/wireless restart > /console 2>/dev/null &");
2. 将改字符串在适当的地方截断. 所谓"当断不断, 反受其乱". 具体改动类似如下, 在用到该字符串前先处理一下:
var->val.string[var->val_len]='\0';
config_set_str("wlan_ssid", p_elem->ifIndex, var->val.string);
希望以后再遇到相同情况时, 我不需要再浪费好几天时间在这上面. 阿门!
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46407/showart_369901.html |
|