您的位置:首页 > 编程语言

WinPcap编程错误:error C2079: 'IPAddress' uses undefined struct 'sockaddr_storage的解决办法

2009-07-26 15:20 525 查看
出现这个问题的原因一般是由于Winsock的版本和IPv4和IPv6的版本兼容性问题。由于新版的 Winpcap 完全使用了新的 Winsock(支持IPv6),因此这个问题可能影响到每一个已有程序。

以下是新旧两版的 packet32.h 之间的差异:

【新版本】

typedef struct npf_if_addr {

struct sockaddr_storage
IPAddress; ///< IP address.

struct sockaddr_storage
SubnetMask; ///< Netmask for that address.

struct sockaddr_storage
Broadcast; ///< Broadcast address.

}npf_if_addr;

【旧版本】

typedef struct npf_if_addr {

struct sockaddr
IPAddress; ///< IP address.

struct sockaddr
SubnetMask; ///< Netmask for that address.

struct sockaddr
Broadcast; ///< Broadcast address.

}npf_if_addr;

很多人如果仍然使用 Visual C++6 编译程序,那就非常不幸的出现了“error C2079: 'IPAddress' uses undefined struct 'sockaddr_storage”的问题了,这是由于VC6中的 winsock2.h 太旧了,它根本不认得 struct
sockaddr_storage。因此,winpcap 自带的例程在VC6下编译时会无情地抛出无数错误。事实上,该结构完全可以使用老的
sockaddr 代替。手工改动 packet32.h,将 sockaddr_storage 换成
sockaddr,这样编译可以顺利通过。但是这种操作的方法有个问题,那就是这样的代码自法支持IPv6。

解决方法:

1.在winpcap库的packet32.h文件里面加入代码(且位于“struct npf_if_addr”定义之前):

#ifndef _SS_PAD1SIZE

struct sockaddr_storage {

u_char sa_len;

u_char sa_family;

u_char padding[128];

};

#endif

2.sockaddr_storage 改成 sockaddr

3.将工程移植到VS2005下进行编译,将工程设置好后,就不会有这种问题(推荐使用这种方法)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐