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下进行编译,将工程设置好后,就不会有这种问题(推荐使用这种方法)
。
以下是新旧两版的 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下进行编译,将工程设置好后,就不会有这种问题(推荐使用这种方法)
。
相关文章推荐
- error:undefined reference to `coloured_LED_init'及相关错误时的解决办法!
- Uncaught TypeError: Cannot read property 'drawImage' of undefined错误的解决办法
- 突然断电,出现'an error occurred during the file system check'错误解决办法
- CentOS 静态IP分配,提示Error, some other host already uses address解决办法
- Redhat5静态IP分配,提示Error, some other host already uses address解决办法
- 关于android编程中遇到的Could not find class 'com.swetake.util.Qrcode错误的原因及解决办法
- JNI编程-- undefined reference to `__android_log_print' 的解决办法
- Dev C++中的错误的解决[Linker error] undefined reference to `__dyn_tls_init_callback'
- Dev C++中的错误的解决[Linker error] undefined reference to `__dyn_tls_init_callback'
- Error for wireless request "Set AP Address" (8B14) : SET failed on device wlan0 错误解决办法
- 编译Ralink SDK时碰到的奇怪错误(undefined reference to `main')的解决办法
- CentOS 静态IP分配,提示Error, some other host already uses address解决办法
- Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法
- python32版本,出现问题“struct.error: argument for 's' must be a bytes object”的解决办法
- Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法
- 编译linux 内核时:decompress.c:(.text+0x25c4): undefined reference to `error'的解决办法
- Server Error in '/fdc' Application错误解决办法
- Linux NFS启动出现出现错误TFTP error: 'Access violation' 的解决办法
- Error in '/' Application. 错误解决办法
- Linux c++ error: undefined reference to 'dlopen' 解决办法