gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

control_unix.go (1441B)


      1 // Copyright 2013 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 //go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
      6 // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
      7 
      8 package ipv6
      9 
     10 import "golang.org/x/net/internal/socket"
     11 
     12 func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
     13 	opt.Lock()
     14 	defer opt.Unlock()
     15 	if so, ok := sockOpts[ssoReceiveTrafficClass]; ok && cf&FlagTrafficClass != 0 {
     16 		if err := so.SetInt(c, boolint(on)); err != nil {
     17 			return err
     18 		}
     19 		if on {
     20 			opt.set(FlagTrafficClass)
     21 		} else {
     22 			opt.clear(FlagTrafficClass)
     23 		}
     24 	}
     25 	if so, ok := sockOpts[ssoReceiveHopLimit]; ok && cf&FlagHopLimit != 0 {
     26 		if err := so.SetInt(c, boolint(on)); err != nil {
     27 			return err
     28 		}
     29 		if on {
     30 			opt.set(FlagHopLimit)
     31 		} else {
     32 			opt.clear(FlagHopLimit)
     33 		}
     34 	}
     35 	if so, ok := sockOpts[ssoReceivePacketInfo]; ok && cf&flagPacketInfo != 0 {
     36 		if err := so.SetInt(c, boolint(on)); err != nil {
     37 			return err
     38 		}
     39 		if on {
     40 			opt.set(cf & flagPacketInfo)
     41 		} else {
     42 			opt.clear(cf & flagPacketInfo)
     43 		}
     44 	}
     45 	if so, ok := sockOpts[ssoReceivePathMTU]; ok && cf&FlagPathMTU != 0 {
     46 		if err := so.SetInt(c, boolint(on)); err != nil {
     47 			return err
     48 		}
     49 		if on {
     50 			opt.set(FlagPathMTU)
     51 		} else {
     52 			opt.clear(FlagPathMTU)
     53 		}
     54 	}
     55 	return nil
     56 }