github.com/mysteriumnetwork/node@v0.0.0-20240516044423-365054f76801/mobile/mysterium/fd_android.go (about)

     1  //go:build android
     2  
     3  /*
     4   * Copyright (C) 2020 The "MysteriumNetwork/node" Authors.
     5   *
     6   * This program is free software: you can redistribute it and/or modify
     7   * it under the terms of the GNU General Public License as published by
     8   * the Free Software Foundation, either version 3 of the License, or
     9   * (at your option) any later version.
    10   *
    11   * This program is distributed in the hope that it will be useful,
    12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14   * GNU General Public License for more details.
    15   *
    16   * You should have received a copy of the GNU General Public License
    17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    18   */
    19  
    20  package mysterium
    21  
    22  import (
    23  	"fmt"
    24  	"net"
    25  
    26  	"golang.zx2c4.com/wireguard/conn"
    27  	"golang.zx2c4.com/wireguard/device"
    28  )
    29  
    30  func peekLookAtSocketFd4(d *device.Device) (fd int, err error) {
    31  	bind, ok := d.Bind().(*conn.StdNetBind)
    32  	if !ok {
    33  		return 0, fmt.Errorf("failed to peek socket fd")
    34  	}
    35  
    36  	return bind.PeekLookAtSocketFd4()
    37  }
    38  
    39  func peekLookAtSocketFd4From(conn *net.UDPConn) (fd int, err error) {
    40  	sysconn, err := conn.SyscallConn()
    41  	if err != nil {
    42  		return
    43  	}
    44  	err = sysconn.Control(func(f uintptr) {
    45  		fd = int(f)
    46  	})
    47  	if err != nil {
    48  		return
    49  	}
    50  	return
    51  }