[PATCH v2] ws2_32: Handle more IGMP socket options

Chip Davis cdavis at codeweavers.com
Fri Oct 18 10:30:44 CDT 2019


October 18, 2019 9:28 AM, "Fabian Maurer" <dark.shadow4 at 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



More information about the wine-devel mailing list