github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/net/ipv4/sockopt_windows.go (about)

     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  	"unsafe"
    12  
    13  	"golang.org/x/net/internal/iana"
    14  )
    15  
    16  func getInt(fd syscall.Handle, opt *sockOpt) (int, error) {
    17  	if opt.name < 1 || opt.typ != ssoTypeInt {
    18  		return 0, errOpNoSupport
    19  	}
    20  	var i int32
    21  	l := int32(4)
    22  	if err := syscall.Getsockopt(fd, iana.ProtocolIP, int32(opt.name), (*byte)(unsafe.Pointer(&i)), &l); err != nil {
    23  		return 0, os.NewSyscallError("getsockopt", err)
    24  	}
    25  	return int(i), nil
    26  }
    27  
    28  func setInt(fd syscall.Handle, opt *sockOpt, v int) error {
    29  	if opt.name < 1 || opt.typ != ssoTypeInt {
    30  		return errOpNoSupport
    31  	}
    32  	i := int32(v)
    33  	return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, iana.ProtocolIP, int32(opt.name), (*byte)(unsafe.Pointer(&i)), 4))
    34  }
    35  
    36  func getInterface(fd syscall.Handle, opt *sockOpt) (*net.Interface, error) {
    37  	if opt.name < 1 || opt.typ != ssoTypeInterface {
    38  		return nil, errOpNoSupport
    39  	}
    40  	return getsockoptInterface(fd, opt.name)
    41  }
    42  
    43  func setInterface(fd syscall.Handle, opt *sockOpt, ifi *net.Interface) error {
    44  	if opt.name < 1 || opt.typ != ssoTypeInterface {
    45  		return errOpNoSupport
    46  	}
    47  	return setsockoptInterface(fd, opt.name, ifi)
    48  }
    49  
    50  func getICMPFilter(fd syscall.Handle, opt *sockOpt) (*ICMPFilter, error) {
    51  	return nil, errOpNoSupport
    52  }
    53  
    54  func setICMPFilter(fd syscall.Handle, opt *sockOpt, f *ICMPFilter) error {
    55  	return errOpNoSupport
    56  }
    57  
    58  func setGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
    59  	if opt.name < 1 || opt.typ != ssoTypeIPMreq {
    60  		return errOpNoSupport
    61  	}
    62  	return setsockoptIPMreq(fd, opt.name, ifi, grp)
    63  }
    64  
    65  func setSourceGroup(fd syscall.Handle, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
    66  	// TODO(mikio): implement this
    67  	return errOpNoSupport
    68  }