荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店