Adds check for sin6_scope_id

Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.442
diff -u -p -u -r1.442 configure.ac
--- configure.ac	18 Feb 2006 15:23:58 -0000	1.442
+++ configure.ac	20 Feb 2006 12:26:43 -0000
@@ -1359,6 +1362,13 @@ AC_CHECK_MEMBERS([struct option.name],,,
 dnl Check for stat.st_blocks
 AC_CHECK_MEMBERS([struct stat.st_blocks])
 
+dnl *** Check for sin6_scope_id (included in rfc2553 but not in older implementations, e.g., glibc 2.1.3.)
+AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id],,,
+[#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <netinet/in.h>])
+
 dnl Check for the external timezone variables timezone and daylight
 AC_CACHE_CHECK([for timezone variable], ac_cv_have_timezone,
                AC_TRY_LINK([#include <time.h>],[timezone;],

Index: dlls/winsock/socket.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/socket.c,v
retrieving revision 1.207
diff -u -p -u -r1.207 socket.c
--- dlls/winsock/socket.c	5 Feb 2006 12:58:22 -0000	1.207
+++ dlls/winsock/socket.c	20 Feb 2006 12:26:19 -0000
@@ -945,6 +945,7 @@ static struct sockaddr* ws_sockaddr_ws2u
             memcpy(&uin6->sin6_addr,&win6old->sin6_addr,16); /* 16 bytes = 128 address bits */
             return (struct sockaddr*)uin6;
         }
+#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
         if (wsaddrlen>=sizeof(struct WS_sockaddr_in6)) {
             *uaddrlen=sizeof(struct sockaddr_in6);
             uin6=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *uaddrlen);
@@ -955,6 +956,7 @@ static struct sockaddr* ws_sockaddr_ws2u
             memcpy(&uin6->sin6_addr,&win6->sin6_addr,16); /* 16 bytes = 128 address bits */
             return (struct sockaddr*)uin6;
         }
+#endif
         FIXME("bad size %d for WS_sockaddr_in6\n",wsaddrlen);
         return NULL;
     }
@@ -1079,6 +1081,7 @@ static int ws_sockaddr_u2ws(const struct
             *wsaddrlen = sizeof(struct WS_sockaddr_in6_old);
             return 0;
         }
+#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
         if (*wsaddrlen >= sizeof(struct WS_sockaddr_in6)) {
             win6->sin6_family   = WS_AF_INET6;
             win6->sin6_port     = uin6->sin6_port;
@@ -1088,6 +1091,7 @@ static int ws_sockaddr_u2ws(const struct
             *wsaddrlen = sizeof(struct WS_sockaddr_in6);
             return 0;
         }
+#endif
         return 0;
     }
     case AF_INET: {
