Module: wine Branch: master Commit: 1399a6eaf8a4185a5606be56f4d951725289b2b4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1399a6eaf8a4185a5606be56f4...
Author: Philip Nilsson wine-devel@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;