~vtuson/scopecreator/twitter-template

« back to all changes in this revision

Viewing changes to src/go/src/code.google.com/p/go.net/ipv4/sockopt_linux.go

  • Committer: Victor Palau
  • Date: 2015-03-11 14:24:42 UTC
  • Revision ID: vtuson@gmail.com-20150311142442-f2pxp111c8ynv232
public release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2012 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
package ipv4
 
6
 
 
7
import (
 
8
        "net"
 
9
        "os"
 
10
        "syscall"
 
11
)
 
12
 
 
13
func ipv4ReceiveTOS(fd int) (bool, error) {
 
14
        v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, sysSockoptReceiveTOS)
 
15
        if err != nil {
 
16
                return false, os.NewSyscallError("getsockopt", err)
 
17
        }
 
18
        return v == 1, nil
 
19
}
 
20
 
 
21
func setIPv4ReceiveTOS(fd int, v bool) error {
 
22
        return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, sysSockoptReceiveTOS, boolint(v)))
 
23
}
 
24
 
 
25
func ipv4MulticastTTL(fd int) (int, error) {
 
26
        v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, sysSockoptMulticastTTL)
 
27
        if err != nil {
 
28
                return 0, os.NewSyscallError("getsockopt", err)
 
29
        }
 
30
        return v, nil
 
31
}
 
32
 
 
33
func setIPv4MulticastTTL(fd int, v int) error {
 
34
        return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, sysSockoptMulticastTTL, v))
 
35
}
 
36
 
 
37
func ipv4MulticastInterface(fd int) (*net.Interface, error) {
 
38
        mreqn, err := syscall.GetsockoptIPMreqn(fd, ianaProtocolIP, sysSockoptMulticastInterface)
 
39
        if err != nil {
 
40
                return nil, os.NewSyscallError("getsockopt", err)
 
41
        }
 
42
        if mreqn.Ifindex == 0 {
 
43
                return nil, nil
 
44
        }
 
45
        return net.InterfaceByIndex(int(mreqn.Ifindex))
 
46
}
 
47
 
 
48
func setIPv4MulticastInterface(fd int, ifi *net.Interface) error {
 
49
        var mreqn syscall.IPMreqn
 
50
        if ifi != nil {
 
51
                mreqn.Ifindex = int32(ifi.Index)
 
52
        }
 
53
        return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreqn(fd, ianaProtocolIP, sysSockoptMulticastInterface, &mreqn))
 
54
}
 
55
 
 
56
func ipv4MulticastLoopback(fd int) (bool, error) {
 
57
        v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, sysSockoptMulticastLoopback)
 
58
        if err != nil {
 
59
                return false, os.NewSyscallError("getsockopt", err)
 
60
        }
 
61
        return v == 1, nil
 
62
}
 
63
 
 
64
func setIPv4MulticastLoopback(fd int, v bool) error {
 
65
        return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, sysSockoptMulticastLoopback, boolint(v)))
 
66
}