github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/sysfs/sock_unsupported.go (about)

     1  //go:build (!linux && !darwin && !windows) || tinygo
     2  
     3  package sysfs
     4  
     5  import (
     6  	"net"
     7  	"syscall"
     8  
     9  	"github.com/tetratelabs/wazero/experimental/sys"
    10  	experimentalsys "github.com/tetratelabs/wazero/experimental/sys"
    11  	"github.com/tetratelabs/wazero/internal/fsapi"
    12  	socketapi "github.com/tetratelabs/wazero/internal/sock"
    13  )
    14  
    15  // MSG_PEEK is a filler value.
    16  const MSG_PEEK = 0x2
    17  
    18  func newTCPListenerFile(tl *net.TCPListener) socketapi.TCPSock {
    19  	return &unsupportedSockFile{}
    20  }
    21  
    22  type unsupportedSockFile struct {
    23  	baseSockFile
    24  }
    25  
    26  // Accept implements the same method as documented on socketapi.TCPSock
    27  func (f *unsupportedSockFile) Accept() (socketapi.TCPConn, sys.Errno) {
    28  	return nil, sys.ENOSYS
    29  }
    30  
    31  func _pollSock(conn syscall.Conn, flag fsapi.Pflag, timeoutMillis int32) (bool, sys.Errno) {
    32  	return false, sys.ENOTSUP
    33  }
    34  
    35  func setNonblockSocket(fd uintptr, enabled bool) sys.Errno {
    36  	return sys.ENOTSUP
    37  }
    38  
    39  func readSocket(fd uintptr, buf []byte) (int, sys.Errno) {
    40  	return -1, sys.ENOTSUP
    41  }
    42  
    43  func writeSocket(fd uintptr, buf []byte) (int, sys.Errno) {
    44  	return -1, sys.ENOTSUP
    45  }
    46  
    47  func recvfrom(fd uintptr, buf []byte, flags int32) (n int, errno sys.Errno) {
    48  	return -1, sys.ENOTSUP
    49  }
    50  
    51  // syscallConnControl extracts a syscall.RawConn from the given syscall.Conn and applies
    52  // the given fn to a file descriptor, returning an integer or a nonzero syscall.Errno on failure.
    53  //
    54  // syscallConnControl streamlines the pattern of extracting the syscall.Rawconn,
    55  // invoking its syscall.RawConn.Control method, then handling properly the errors that may occur
    56  // within fn or returned by syscall.RawConn.Control itself.
    57  func syscallConnControl(conn syscall.Conn, fn func(fd uintptr) (int, experimentalsys.Errno)) (n int, errno sys.Errno) {
    58  	return -1, sys.ENOTSUP
    59  }
    60  
    61  // Accept implements the same method as documented on socketapi.TCPSock
    62  func (f *tcpListenerFile) Accept() (socketapi.TCPConn, experimentalsys.Errno) {
    63  	return nil, experimentalsys.ENOSYS
    64  }
    65  
    66  // Shutdown implements the same method as documented on experimentalsys.Conn
    67  func (f *tcpConnFile) Shutdown(how int) experimentalsys.Errno {
    68  	// FIXME: can userland shutdown listeners?
    69  	var err error
    70  	switch how {
    71  	case socketapi.SHUT_RD:
    72  		err = f.tc.Close()
    73  	case socketapi.SHUT_WR:
    74  		err = f.tc.Close()
    75  	case socketapi.SHUT_RDWR:
    76  		return f.close()
    77  	default:
    78  		return experimentalsys.EINVAL
    79  	}
    80  	return experimentalsys.UnwrapOSError(err)
    81  }