// Copyright 2013 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 aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos

package ipv6

import 

func setControlMessage( *socket.Conn,  *rawOpt,  ControlFlags,  bool) error {
	.Lock()
	defer .Unlock()
	if ,  := sockOpts[ssoReceiveTrafficClass];  && &FlagTrafficClass != 0 {
		if  := .SetInt(, boolint());  != nil {
			return 
		}
		if  {
			.set(FlagTrafficClass)
		} else {
			.clear(FlagTrafficClass)
		}
	}
	if ,  := sockOpts[ssoReceiveHopLimit];  && &FlagHopLimit != 0 {
		if  := .SetInt(, boolint());  != nil {
			return 
		}
		if  {
			.set(FlagHopLimit)
		} else {
			.clear(FlagHopLimit)
		}
	}
	if ,  := sockOpts[ssoReceivePacketInfo];  && &flagPacketInfo != 0 {
		if  := .SetInt(, boolint());  != nil {
			return 
		}
		if  {
			.set( & flagPacketInfo)
		} else {
			.clear( & flagPacketInfo)
		}
	}
	if ,  := sockOpts[ssoReceivePathMTU];  && &FlagPathMTU != 0 {
		if  := .SetInt(, boolint());  != nil {
			return 
		}
		if  {
			.set(FlagPathMTU)
		} else {
			.clear(FlagPathMTU)
		}
	}
	return nil
}