Philip Nilsson : ws2_32: Set IPV6_V6ONLY when required to be compatible with Windows.
Alexandre Julliard
julliard at winehq.org
Tue Sep 25 07:50:55 CDT 2007
Module: wine
Branch: master
Commit: 1399a6eaf8a4185a5606be56f4d951725289b2b4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1399a6eaf8a4185a5606be56f4d951725289b2b4
Author: Philip Nilsson <wine-devel at nullref.se>
Date: Sat Sep 22 16:18:55 2007 +0200
ws2_32: Set IPV6_V6ONLY when required to be compatible with Windows.
---
dlls/ws2_32/socket.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 13878a7..c517f7e 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1405,6 +1405,20 @@ int WINAPI WS_bind(SOCKET s, const struct WS_sockaddr* name, int namelen)
}
else
{
+#ifdef IPV6_V6ONLY
+ const struct sockaddr_in6 *in6 = (const struct sockaddr_in6*) &uaddr;
+ if (name->sa_family == WS_AF_INET6 &&
+ !memcmp(&in6->sin6_addr, &in6addr_any, sizeof(struct in6_addr)))
+ {
+ int enable = 1;
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &enable, sizeof(enable)) == -1)
+ {
+ release_sock_fd( s, fd );
+ SetLastError(WSAEAFNOSUPPORT);
+ return INVALID_SOCKET;
+ }
+ }
+#endif
if (bind(fd, &uaddr.addr, uaddrlen) < 0)
{
int loc_errno = errno;
More information about the wine-cvs
mailing list