github.com/yggdrasil-network/yggdrasil-go@v0.5.6/src/core/link_tcp_darwin.go (about)

     1  //go:build darwin
     2  // +build darwin
     3  
     4  package core
     5  
     6  import (
     7  	"syscall"
     8  
     9  	"golang.org/x/sys/unix"
    10  )
    11  
    12  // WARNING: This context is used both by net.Dialer and net.Listen in tcp.go
    13  
    14  func (t *linkTCP) tcpContext(network, address string, c syscall.RawConn) error {
    15  	var control error
    16  	var recvanyif error
    17  
    18  	control = c.Control(func(fd uintptr) {
    19  		// sys/socket.h: #define	SO_RECV_ANYIF	0x1104
    20  		recvanyif = unix.SetsockoptInt(int(fd), syscall.SOL_SOCKET, 0x1104, 1)
    21  	})
    22  
    23  	switch {
    24  	case recvanyif != nil:
    25  		return recvanyif
    26  	default:
    27  		return control
    28  	}
    29  }
    30  
    31  func (t *linkTCP) getControl(sintf string) func(string, string, syscall.RawConn) error {
    32  	return t.tcpContext
    33  }