荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: jjk (kernel), 信区: Linux
标 题: 和我一起学libpcap(2.3)(转寄)
发信站: 荔园晨风BBS站 (Sat Mar 2 22:39:29 2002), 转信
【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: doggy (不能回家好无聊), 信区: Linux
标 题: 和我一起学libpcap(2.3)(转寄)
发信站: BBS 水木清华站 (Mon Feb 4 05:50:18 2002)
本文版权所有:doggy(chaujy@x263.net) 欢迎转载
2.3 出错处理
象其它库一样,libpcap 也有自己的错误处理机制
基本上每个函数都有返回值,出错时返回值<0,另外有如下函数
void pcap_perror(pcap_t *, char *);
char *pcap_strerror(int);
char *pcap_geterr(pcap_t *);
前两个和 perror() strerror() 用法相同,最后一个也很简单
在 pcap_t 中有一个成员存了错误字串
struct pcap {
...
char errbuf[PCAP_ERRBUF_SIZE];
};
所以......
于是我们在刚才的程序中加上错误处理
先加一个函数
#include <stdarg.h>
int err_quit(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
exit(-1);
}
之后处理每个函数的异常,在成功建立捕捉句柄pcap_t *pd前,使用ebuf参数
char *device = pcap_lookupdev(ebuf);
if(device == NULL)
err_quit("%s", ebuf);
有了句柄pd后
if(pcap_compile(pd, &fcode, NULL, 1, 0) < 0)
err_quit("%s", pcap_geterr(pd));
注意不是每个函数都是出错返回<0
pcap_datalink(pd)和pcap_snapshot(pd)等可不要这么处理
--
我宁愿尝试两个人的磨合
也不要继续一个人的寂寞
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.169.39]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店