October 18, 2019 9:28 AM, "Fabian Maurer" dark.shadow4@web.de wrote:
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index aa0a164ff9..22a07ce893 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -6011,6 +6016,23 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, case WS_IPPROTO_IP: switch(optname) {
case WS_IP_ADD_SOURCE_MEMBERSHIP:
case WS_IP_DROP_SOURCE_MEMBERSHIP:
case WS_IP_BLOCK_SOURCE:
case WS_IP_UNBLOCK_SOURCE:
{
/* ip_mreq_source is different on Windows (switched source/interface)m so we need to make a copy */
Only on Linux. BSD has it in the same order as Windows.
WS_IP_MREQ_SOURCE* val = (void*)optval;
mreq_source.imr_interface.s_addr = val->imr_interface.S_un.S_addr;
mreq_source.imr_multiaddr.s_addr = val->imr_multiaddr.S_un.S_addr;
mreq_source.imr_sourceaddr.s_addr = val->imr_sourceaddr.S_un.S_addr;
optval = (char*)&mreq_source;
optlen = sizeof(mreq_source);
convert_sockopt(&level, &optname);
break;
} case WS_IP_ADD_MEMBERSHIP: case WS_IP_DROP_MEMBERSHIP:
#ifdef IP_HDRINCL
Chip