// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build darwin || freebsd || linux

package ipv4

import (
	
	

	

	
)

func ( *sockOpt) ( *socket.Conn) (*net.Interface, error) {
	 := make([]byte, .Len)
	if ,  := .Get(, );  != nil {
		return nil, 
	}
	 := (*unix.IPMreqn)(unsafe.Pointer(&[0]))
	if .Ifindex == 0 {
		return nil, nil
	}
	,  := net.InterfaceByIndex(int(.Ifindex))
	if  != nil {
		return nil, 
	}
	return , nil
}

func ( *sockOpt) ( *socket.Conn,  *net.Interface,  net.IP) error {
	var  unix.IPMreqn
	if  != nil {
		.Ifindex = int32(.Index)
	}
	if  != nil {
		.Multiaddr = [4]byte{[0], [1], [2], [3]}
	}
	 := (*[unix.SizeofIPMreqn]byte)(unsafe.Pointer(&))[:unix.SizeofIPMreqn]
	return .Set(, )
}