<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16525" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT size=2>I've committed the patch on our sources.</FONT></DIV>
<DIV><FONT size=2>Actually such source file is part of the libpcap official 
sources, you can see the commit here</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2><A 
href="http://cvs.tcpdump.org/cgi-bin/cvsweb/libpcap/Win32/Src/gai_strerror.c">http://cvs.tcpdump.org/cgi-bin/cvsweb/libpcap/Win32/Src/gai_strerror.c</A></FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Thanks for the bug report!</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Have a&nbsp;nice day</FONT></DIV>
<DIV><FONT size=2>GV</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=kha.kha@laposte.net href="mailto:kha.kha@laposte.net">kha</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=winpcap-bugs@winpcap.org 
  href="mailto:winpcap-bugs@winpcap.org">winpcap-bugs@winpcap.org</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=winpcap-users@winpcap.org 
  href="mailto:winpcap-users@winpcap.org">winpcap-users@winpcap.org</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Tuesday, September 18, 2007 2:32 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> [Winpcap-users] Patch - Problems 
  compiling Winpcap 4.0.1 with MinGW</DIV>
  <DIV><BR></DIV>Hi,<BR><BR>I am trying to compile some libraries (Winpcap 
  4.0.1/ libnet and others) under MinGW (not the one included in Cygwin, but the 
  one at <A href="http://www.mingw.org/">http://www.mingw.org/</A>).<BR><BR>Here 
  is <A 
  href="http://mathieu.carbou.free.fr/wiki/index.php?title=Setup_and_configure_MinGW">my 
  environment</A>:<BR>
  <UL>
    <LI>Windows XP pro, 32bits<BR>
    <LI>gcc-core-3.4.5-20060117-1.tar.gz 
    <LI>gcc-g++-3.4.5-20060117-1.tar.gz 
    <LI>gcc-objc-3.4.5-20060117-1.tar.gz 
    <LI>mingw-runtime-3.13.tar.gz 
    <LI>mingw32-make-3.81-2.tar.gz 
    <LI>w32api-3.10.tar.gz<BR></LI></UL>I get the following error:<BR><PRE><A href="mailto:mcarbou@BOX">mcarbou@BOX</A> /d/data/download/winpcap/wpcap/PRJ
$ make
gcc -I ../libpcap -I ../libpcap/bpf -I ../libpcap/lbl -I ../libpcap/Win32/Include -I../libpcap/Win32/Include/ipv6kit -I ../../common -I ../Win32-Extensions -I ../../../Airpcap_DevPack/include -DLIBPCAP_EXPORTS -DYY_NEVER_INTERACTIVE -Dyylval=pcap_lval -DHAVE_STRERROR -DNEED_ADDRINFO_H -DINET6 -DWIN3
2 -DSIZEOF_CHAR=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG_LONG=8 -DWPCAP -D'_U_=' -DHAVE_SNPRINTF -DHAVE_VSNPRINTF -DSIZEOF_LONG_LONG=8 -DHAVE_REMOTE -DHAVE_AIRPCAP_API -mno-cygwin -shared -O -o ../libpcap/Win32/Src/gai_strerror.o -c ../libpcap/Win32/Src/gai_strerror.c
../libpcap/Win32/Src/gai_strerror.c:72: <B>error: conflicting types for 'gai_strerrorA'</B>
c:/programs/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ws2tcpip.h:309: <B>error: previous definition of 'gai_strerrorA' was here</B>
make: *** [../libpcap/Win32/Src/gai_strerror.o] Error 1

</PRE>Searching in the mailing list archives, i have found the possible cause 
  of this issue:<BR><BR><A 
  href="http://www.winpcap.org/pipermail/winpcap-users/2005-December/000575.html">http://www.winpcap.org/pipermail/winpcap-users/2005-December/000575.html</A><BR><BR>A 
  patch seems to be applied to add the gai_strerrorA function that was missing. 
  But in my environment, i have this function already defined in ws2tcpip.h. See 
  the attachment. So simply adding a #ifndef gai_strerror seems to solve the 
  issue.<BR><BR>Here is the patch:<BR><PRE>--- /d/data/download/gai_strerror.c     Sun Jan 22 15:14:18 2006
+++ ../libpcap/Win32/Src/gai_strerror.c Tue Sep 18 21:29:11 2007
@@ -67,6 +67,7 @@
 #define EAI_MAX (sizeof(ai_errlist)/sizeof(ai_errlist[0]))
 #endif

+#ifndef gai_strerror
 char *
 WSAAPI gai_strerrorA(int ecode)
 {
@@ -74,4 +75,4 @@
                return ai_errlist[ecode];
        return "Unknown error";
 }
-
+#endif
</PRE><BR>
  <DIV class=moz-signature>-- <BR>
  <TABLE 
  style="BORDER-RIGHT: rgb(0,0,0) 2px outset; PADDING-RIGHT: 3px; BORDER-TOP: rgb(0,0,0) 2px outset; PADDING-LEFT: 3px; FONT-SIZE: 11px; PADDING-BOTTOM: 1px; BORDER-LEFT: rgb(0,0,0) 2px outset; COLOR: rgb(0,0,0); PADDING-TOP: 1px; BORDER-BOTTOM: rgb(0,0,0) 2px outset; FONT-FAMILY: monospace; BACKGROUND-COLOR: rgb(240,240,255)" 
  cellSpacing=0>
    <TBODY>
    <TR>
      <TD colSpan=2><SPAN style="FONT-SIZE: larger"><B>Mathieu 
        Carbou</B></SPAN><BR>IT Consultant,<BR>Sun Certified Java Programmer 
    </TD></TR>
    <TR>
      <TD><B>Mail:</B></TD>
      <TD><A 
        href="mailto:mathieu.carbou@gmail.com">mathieu.carbou@gmail.com</A></TD></TR>
    <TR>
      <TD><B>Website:</B></TD>
      <TD><A 
        href="http://mathieu.carbou.free.fr/">http://mathieu.carbou.free.fr/</A></TD></TR></TBODY></TABLE></DIV><BR>
  <P>
  <HR>

  <P></P>/*<BR>&nbsp;*&nbsp; ws2tcpip.h : TCP/IP specific extensions in Windows 
  Sockets 2<BR>&nbsp;*<BR>&nbsp;* Portions Copyright (c) 1980, 1983, 1988, 
  1993<BR>&nbsp;* The Regents of the University of California.&nbsp; All rights 
  reserved.<BR>&nbsp;*<BR>&nbsp;*/<BR><BR>#ifndef _WS2TCPIP_H<BR>#define 
  _WS2TCPIP_H<BR>#if __GNUC__ &gt;=3<BR>#pragma GCC 
  system_header<BR>#endif<BR><BR>#if (defined _WINSOCK_H &amp;&amp; !defined 
  _WINSOCK2_H)<BR>#error "ws2tcpip.h is not compatible with winsock.h. Include 
  winsock2.h instead."<BR>#endif<BR><BR>#include 
  &lt;winsock2.h&gt;<BR>#ifdef&nbsp; __cplusplus<BR>extern "C" 
  {<BR>#endif<BR><BR>/* <BR>&nbsp;* The IP_* macros are also defined in 
  winsock.h, but some values are different there.<BR>&nbsp;* The values defined 
  in winsock.h for 1.1 and used in wsock32.dll are consistent<BR>&nbsp;* with 
  the original values Steve Deering defined in his document "IP Multicast 
  Extensions<BR>&nbsp;* for 4.3BSD UNIX related systems (MULTICAST 1.2 
  Release)." However, these conflicted with<BR>&nbsp;* the definitions for some 
  IPPROTO_IP level socket options already assigned by BSD,<BR>&nbsp;* so 
  Berkeley changed all the values by adding 7.&nbsp; WinSock2 (ws2_32.dll)&nbsp; 
  uses<BR>&nbsp;* the BSD 4.4 compatible values defined 
  here.<BR>&nbsp;*<BR>&nbsp;* See also: msdn kb article Q257460<BR>&nbsp;* 
  http://support.microsoft.com/support/kb/articles/Q257/4/60.asp<BR>&nbsp;*/<BR><BR>/* 
  This is also defined in winsock.h; value hasn't changed */<BR>#define 
  IP_OPTIONS&nbsp; 1<BR><BR>#define IP_HDRINCL&nbsp; 2<BR>/*<BR>&nbsp;* These 
  are also be defined in winsock.h,<BR>&nbsp;* but values have changed for 
  WinSock2 interface<BR>&nbsp;*/<BR>#define IP_TOS 3&nbsp;&nbsp; /* old (winsock 
  1.1) value 8 */<BR>#define IP_TTL 4&nbsp;&nbsp; /* old value 7 */<BR>#define 
  IP_MULTICAST_IF 9&nbsp;&nbsp; /* old value 2 */<BR>#define IP_MULTICAST_TTL 
  10&nbsp; /* old value 3 */<BR>#define IP_MULTICAST_LOOP 11&nbsp; /* old value 
  4 */<BR>#define IP_ADD_MEMBERSHIP 12&nbsp; /* old value 5 */<BR>#define 
  IP_DROP_MEMBERSHIP 13&nbsp; /* old value 6 */<BR>#define IP_DONTFRAGMENT 
  14&nbsp; /* old value 9 */<BR>#define IP_ADD_SOURCE_MEMBERSHIP 15<BR>#define 
  IP_DROP_SOURCE_MEMBERSHIP 16<BR>#define IP_BLOCK_SOURCE 17<BR>#define 
  IP_UNBLOCK_SOURCE 18<BR>#define IP_PKTINFO 19<BR><BR>/*<BR>&nbsp;* As with BSD 
  implementation, IPPROTO_IPV6 level socket options have<BR>&nbsp;* same values 
  as IPv4 counterparts.<BR>&nbsp;*/<BR>#define IPV6_UNICAST_HOPS 4<BR>#define 
  IPV6_MULTICAST_IF 9<BR>#define IPV6_MULTICAST_HOPS 10<BR>#define 
  IPV6_MULTICAST_LOOP 11<BR>#define IPV6_ADD_MEMBERSHIP 12<BR>#define 
  IPV6_DROP_MEMBERSHIP 13<BR>#define IPV6_JOIN_GROUP 
  IPV6_ADD_MEMBERSHIP<BR>#define IPV6_LEAVE_GROUP 
  IPV6_DROP_MEMBERSHIP<BR>#define IPV6_PKTINFO 19<BR><BR>#define 
  IP_DEFAULT_MULTICAST_TTL 1 <BR>#define IP_DEFAULT_MULTICAST_LOOP 1 <BR>#define 
  IP_MAX_MEMBERSHIPS 20 <BR><BR>#define TCP_EXPEDITED_1122&nbsp; 
  2<BR><BR>#define UDP_NOCHECKSUM 1<BR><BR>/* INTERFACE_INFO iiFlags 
  */<BR>#define IFF_UP&nbsp; 1<BR>#define IFF_BROADCAST&nbsp;&nbsp; 2<BR>#define 
  IFF_LOOPBACK&nbsp;&nbsp;&nbsp; 4<BR>#define IFF_POINTTOPOINT&nbsp;&nbsp;&nbsp; 
  8<BR>#define IFF_MULTICAST&nbsp;&nbsp; 16<BR><BR>#define 
  SIO_GET_INTERFACE_LIST&nbsp; _IOR('t', 127, u_long)<BR><BR>#define 
  INET_ADDRSTRLEN&nbsp; 16<BR>#define INET6_ADDRSTRLEN 46<BR><BR>/* getnameinfo 
  constants */ <BR>#define NI_MAXHOST 1025<BR>#define NI_MAXSERV 
  32<BR><BR>#define NI_NOFQDN 0x01<BR>#define NI_NUMERICHOST 0x02<BR>#define 
  NI_NAMEREQD 0x04<BR>#define NI_NUMERICSERV 0x08<BR>#define NI_DGRAM 
  0x10<BR><BR>/* getaddrinfo constants */<BR>#define AI_PASSIVE 1<BR>#define 
  AI_CANONNAME 2<BR>#define AI_NUMERICHOST 4<BR><BR>/* getaddrinfo error codes 
  */<BR>#define EAI_AGAIN WSATRY_AGAIN<BR>#define EAI_BADFLAGS 
  WSAEINVAL<BR>#define EAI_FAIL WSANO_RECOVERY<BR>#define EAI_FAMILY 
  WSAEAFNOSUPPORT<BR>#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY<BR>#define 
  EAI_NODATA WSANO_DATA<BR>#define EAI_NONAME WSAHOST_NOT_FOUND<BR>#define 
  EAI_SERVICE WSATYPE_NOT_FOUND<BR>#define EAI_SOCKTYPE 
  WSAESOCKTNOSUPPORT<BR><BR>/*<BR>&nbsp;*&nbsp;&nbsp; ip_mreq also in winsock.h 
  for WinSock1.1,<BR>&nbsp;*&nbsp;&nbsp; but online msdn docs say it is defined 
  here for WinSock2.<BR>&nbsp;*/ <BR><BR>struct ip_mreq {<BR>struct in_addr 
  imr_multiaddr;<BR>struct in_addr imr_interface;<BR>};<BR><BR>struct 
  ip_mreq_source {<BR>struct in_addr imr_multiaddr;<BR>struct in_addr 
  imr_sourceaddr;<BR>struct in_addr imr_interface;<BR>};<BR><BR>struct 
  ip_msfilter {<BR>struct in_addr imsf_multiaddr;<BR>struct in_addr 
  imsf_interface;<BR>u_long imsf_fmode;<BR>u_long imsf_numsrc;<BR>struct in_addr 
  imsf_slist[1];<BR>};<BR><BR>#define IP_MSFILTER_SIZE(numsrc) \<BR>&nbsp;&nbsp; 
  (sizeof(struct ip_msfilter) - sizeof(struct in_addr) \<BR>&nbsp;&nbsp; + 
  (numsrc) * sizeof(struct in_addr))<BR><BR>struct in_pktinfo {<BR>IN_ADDR 
  ipi_addr;<BR>UINT&nbsp;&nbsp;&nbsp; ipi_ifindex;<BR>};<BR>typedef struct 
  in_pktinfo IN_PKTINFO;<BR><BR><BR>/* ipv6 */ <BR>/* These require XP or .NET 
  Server or use of add-on IPv6 stacks on NT 4<BR>&nbsp; or higher */<BR><BR>/* 
  This is based on the example given in RFC 2553 with stdint 
  types<BR>&nbsp;&nbsp; changed to BSD types.&nbsp; For now, use these&nbsp; 
  field names until there<BR>&nbsp;&nbsp; is some consistency in MS docs. In 
  this file, we only use the<BR>&nbsp;&nbsp; in6_addr structure start address, 
  with casts to get the right offsets<BR>&nbsp;&nbsp; when testing addresses 
  */<BR>&nbsp; <BR>struct in6_addr {<BR>&nbsp;&nbsp;&nbsp; union 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u_char 
  _S6_u8[16];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u_short 
  _S6_u16[8];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u_long 
  _S6_u32[4];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
  _S6_un;<BR>};<BR>/* s6_addr is the standard name */<BR>#define s6_addr 
  _S6_un._S6_u8<BR><BR>/* These are GLIBC names */ <BR>#define s6_addr16 
  _S6_un._S6_u16<BR>#define s6_addr32 _S6_un._S6_u32<BR><BR>/* These are used in 
  some MS code */<BR>#define in_addr6 in6_addr<BR>#define _s6_bytes 
  _S6_un._S6_u8<BR>#define _s6_words _S6_un._S6_u16<BR><BR>typedef struct 
  in6_addr IN6_ADDR,&nbsp; *PIN6_ADDR, *LPIN6_ADDR;<BR><BR>struct sockaddr_in6 
  {<BR>short sin6_family; /* AF_INET6 */<BR>u_short sin6_port; /* transport 
  layer port # */<BR>u_long sin6_flowinfo; /* IPv6 traffic class &amp; flow info 
  */<BR>struct in6_addr sin6_addr;&nbsp; /* IPv6 address */<BR>u_long 
  sin6_scope_id; /* set of interfaces for a scope */<BR>};<BR>typedef struct 
  sockaddr_in6 SOCKADDR_IN6, *PSOCKADDR_IN6, *LPSOCKADDR_IN6;<BR><BR>extern 
  const struct in6_addr in6addr_any;<BR>extern const struct in6_addr 
  in6addr_loopback;<BR>/* the above can get initialised using: */ <BR>#define 
  IN6ADDR_ANY_INIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 0 }<BR>#define 
  IN6ADDR_LOOPBACK_INIT&nbsp;&nbsp; { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 
  }<BR><BR>/* Described in RFC 2292, but not in 2553 */<BR>/* int 
  IN6_ARE_ADDR_EQUAL(const struct in6_addr * a, const struct in6_addr * b) 
  */<BR>#define IN6_ARE_ADDR_EQUAL(a, b) \<BR>&nbsp;&nbsp;&nbsp; (memcmp 
  ((void*)(a), (void*)(b), sizeof (struct in6_addr)) == 0)<BR><BR><BR>/* Address 
  Testing Macros <BR><BR>&nbsp;These macro functions all take const struct 
  in6_addr* as arg.<BR>&nbsp;Static inlines would allow type checking, but RFC 
  2553 says they<BR>&nbsp;macros. <BR>&nbsp;NB: These are written specifically 
  for little endian host */<BR><BR>#define IN6_IS_ADDR_UNSPECIFIED(_addr) 
  \<BR>(&nbsp;&nbsp; (((const u_long *)(_addr))[0] == 0) \<BR>&amp;&amp; 
  (((const u_long *)(_addr))[1] == 0) \<BR>&amp;&amp; (((const u_long 
  *)(_addr))[2] == 0) \<BR>&amp;&amp; (((const u_long *)(_addr))[3] == 
  0))<BR><BR>#define IN6_IS_ADDR_LOOPBACK(_addr) \<BR>(&nbsp;&nbsp; (((const 
  u_long *)(_addr))[0] == 0) \<BR>&amp;&amp; (((const u_long *)(_addr))[1] == 0) 
  \<BR>&amp;&amp; (((const u_long *)(_addr))[2] == 0) \<BR>&amp;&amp; (((const 
  u_long *)(_addr))[3] == 0x01000000)) /* Note byte order reversed */<BR>/* 
  &nbsp;&nbsp;&nbsp; (((const u_long *)(_addr))[3] == ntohl(1))&nbsp; 
  */<BR><BR>#define IN6_IS_ADDR_MULTICAST(_addr) (((const u_char *) (_addr))[0] 
  == 0xff)<BR><BR>#define IN6_IS_ADDR_LINKLOCAL(_addr) \<BR>(&nbsp;&nbsp; 
  (((const u_char *)(_addr))[0] == 0xfe) \<BR>&amp;&amp; ((((const u_char 
  *)(_addr))[1] &amp; 0xc0) == 0x80))<BR><BR>#define 
  IN6_IS_ADDR_SITELOCAL(_addr) \<BR>(&nbsp;&nbsp; (((const u_char *)(_addr))[0] 
  == 0xfe) \<BR>&amp;&amp; ((((const u_char *)(_addr))[1] &amp; 0xc0) == 
  0xc0))<BR><BR>#define IN6_IS_ADDR_V4MAPPED(_addr) \<BR>(&nbsp;&nbsp; (((const 
  u_long *)(_addr))[0] == 0) \<BR>&amp;&amp; (((const u_long *)(_addr))[1] == 0) 
  \<BR>&amp;&amp; (((const u_long *)(_addr))[2] == 0xffff0000)) /* Note byte 
  order reversed */<BR>/* &nbsp;&nbsp;&nbsp; (((const u_long *)(_addr))[2] == 
  ntohl(0x0000ffff))) */<BR><BR>#define IN6_IS_ADDR_V4COMPAT(_addr) 
  \<BR>(&nbsp;&nbsp; (((const u_long *)(_addr))[0] == 0) \<BR>&amp;&amp; 
  (((const u_long *)(_addr))[1] == 0) \<BR>&amp;&amp; (((const u_long 
  *)(_addr))[2] == 0) \<BR>&amp;&amp; (((const u_long *)(_addr))[3] != 0) 
  \<BR>&amp;&amp; (((const u_long *)(_addr))[3] != 0x01000000)) /* Note byte 
  order reversed 
  */<BR>/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ntohl 
  (((const u_long *)(_addr))[3]) &gt; 1 ) */<BR><BR><BR>#define 
  IN6_IS_ADDR_MC_NODELOCAL(_addr) \<BR>(&nbsp;&nbsp; 
  IN6_IS_ADDR_MULTICAST(_addr) \<BR>&amp;&amp; ((((const u_char *)(_addr))[1] 
  &amp; 0xf) == 0x1)) <BR><BR>#define IN6_IS_ADDR_MC_LINKLOCAL(_addr) 
  \<BR>(&nbsp;&nbsp; IN6_IS_ADDR_MULTICAST (_addr) \<BR>&amp;&amp; ((((const 
  u_char *)(_addr))[1] &amp; 0xf) == 0x2))<BR><BR>#define 
  IN6_IS_ADDR_MC_SITELOCAL(_addr) \<BR>(&nbsp;&nbsp; 
  IN6_IS_ADDR_MULTICAST(_addr) \<BR>&amp;&amp; ((((const u_char *)(_addr))[1] 
  &amp; 0xf) == 0x5))<BR><BR>#define IN6_IS_ADDR_MC_ORGLOCAL(_addr) 
  \<BR>(&nbsp;&nbsp; IN6_IS_ADDR_MULTICAST(_addr) \<BR>&amp;&amp; ((((const 
  u_char *)(_addr))[1] &amp; 0xf) == 0x8))<BR><BR>#define 
  IN6_IS_ADDR_MC_GLOBAL(_addr) \<BR>(&nbsp;&nbsp; IN6_IS_ADDR_MULTICAST(_addr) 
  \<BR>&amp;&amp; ((((const u_char *)(_addr))[1] &amp; 0xf) == 
  0xe))<BR><BR><BR>typedef int socklen_t;<BR><BR>struct ipv6_mreq {<BR>struct 
  in6_addr ipv6mr_multiaddr;<BR>unsigned int&nbsp;&nbsp;&nbsp; 
  ipv6mr_interface;<BR>};<BR>typedef struct ipv6_mreq IPV6_MREG;<BR><BR>struct 
  in6_pktinfo {<BR>IN6_ADDR ipi6_addr;<BR>UINT&nbsp;&nbsp;&nbsp;&nbsp; 
  ipi6_ifindex;<BR>};<BR>typedef struct&nbsp; in6_pktinfo 
  IN6_PKTINFO;<BR><BR>struct addrinfo {<BR>int&nbsp;&nbsp;&nbsp;&nbsp; 
  ai_flags;<BR>int&nbsp;&nbsp;&nbsp;&nbsp; 
  ai_family;<BR>int&nbsp;&nbsp;&nbsp;&nbsp; 
  ai_socktype;<BR>int&nbsp;&nbsp;&nbsp;&nbsp; ai_protocol;<BR>size_t&nbsp; 
  ai_addrlen;<BR>char&nbsp;&nbsp; *ai_canonname;<BR>struct sockaddr&nbsp; 
  *ai_addr;<BR>struct addrinfo&nbsp; *ai_next;<BR>};<BR><BR>#if (_WIN32_WINNT 
  &gt;= 0x0501)<BR>void WSAAPI freeaddrinfo (struct addrinfo*);<BR>int WSAAPI 
  getaddrinfo (const char*,const char*,const struct 
  addrinfo*,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct 
  addrinfo**);<BR>int WSAAPI getnameinfo(const struct 
  sockaddr*,socklen_t,char*,DWORD,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  char*,DWORD,int);<BR>#else<BR>/* FIXME: Need WS protocol-independent API 
  helpers.&nbsp; */<BR>#endif<BR><BR>static __inline char*<BR>gai_strerrorA(int 
  ecode)<BR>{<BR>static char message[1024+1];<BR>DWORD dwFlags = 
  FORMAT_MESSAGE_FROM_SYSTEM<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  | FORMAT_MESSAGE_IGNORE_INSERTS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 
  FORMAT_MESSAGE_MAX_WIDTH_MASK;<BR>DWORD dwLanguageId = 
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);<BR>&nbsp; FormatMessageA(dwFlags, 
  NULL, ecode, dwLanguageId, (LPSTR)message, 1024, NULL);<BR>return 
  message;<BR>}<BR>static __inline WCHAR*<BR>gai_strerrorW(int 
  ecode)<BR>{<BR>static WCHAR message[1024+1];<BR>DWORD dwFlags = 
  FORMAT_MESSAGE_FROM_SYSTEM<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  | FORMAT_MESSAGE_IGNORE_INSERTS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 
  FORMAT_MESSAGE_MAX_WIDTH_MASK;<BR>DWORD dwLanguageId = 
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);<BR>&nbsp; FormatMessageW(dwFlags, 
  NULL, ecode, dwLanguageId, (LPWSTR)message, 1024, NULL);<BR>return 
  message;<BR>}<BR>#ifdef UNICODE<BR>#define gai_strerror 
  gai_strerrorW<BR>#else<BR>#define gai_strerror 
  gai_strerrorA<BR>#endif<BR><BR>/* Some older IPv4/IPv6 compatibility stuff 
  */<BR><BR>/* This struct lacks sin6_scope_id; retained for use in sockaddr_gen 
  */<BR>struct sockaddr_in6_old {<BR>short&nbsp;&nbsp; sin6_family;<BR>u_short 
  sin6_port;<BR>u_long&nbsp; sin6_flowinfo;<BR>struct in6_addr 
  sin6_addr;<BR>};<BR><BR>typedef union sockaddr_gen{<BR>struct sockaddr 
  Address;<BR>struct sockaddr_in AddressIn;<BR>struct sockaddr_in6_old 
  AddressIn6;<BR>} sockaddr_gen;<BR><BR><BR>typedef struct _INTERFACE_INFO 
  {<BR>u_long iiFlags;<BR>sockaddr_gen iiAddress;<BR>sockaddr_gen 
  iiBroadcastAddress;<BR>sockaddr_gen iiNetmask;<BR>} INTERFACE_INFO, 
  *LPINTERFACE_INFO;<BR><BR>/*<BR>&nbsp;&nbsp; The definition above can cause 
  problems on NT4,prior to sp4.<BR>&nbsp;&nbsp; To workaround, include the 
  following struct and typedef and<BR>&nbsp;&nbsp; #define INTERFACE_INFO 
  OLD_INTERFACE_INFO<BR>&nbsp;&nbsp; See: FIX: WSAIoctl SIO_GET_INTERFACE_LIST 
  Option Problem<BR>&nbsp;&nbsp; (Q181520) in MSDN KB.<BR><BR>&nbsp;&nbsp; The 
  old definition causes problems on newer NT and on XP.<BR><BR>typedef struct 
  _OLD_INTERFACE_INFO {<BR>u_long iiFlags;<BR>struct sockaddr 
  iiAddress;<BR>&nbsp; struct sockaddr iiBroadcastAddress;<BR>&nbsp; struct 
  sockaddr iiNetmask;<BR>} OLD_INTERFACE_INFO;<BR>*/<BR><BR>#ifdef&nbsp; 
  __cplusplus<BR>}<BR>#endif<BR>#endif<BR>
  <P>
  <HR>

  <P></P>_______________________________________________<BR>Winpcap-users 
  mailing 
  list<BR>Winpcap-users@winpcap.org<BR>https://www.winpcap.org/mailman/listinfo/winpcap-users<BR></BLOCKQUOTE></BODY></HTML>