Files
wazero/internal/sysfs/sock_unsupported.go
Gram 771a1e971a wasi: support building internal/sysfs with TinyGo (#2160)
Signed-off-by: gram <git@orsinium.dev>
Signed-off-by: Edoardo Vacchi <evacchi@users.noreply.github.com>
Co-authored-by: Edoardo Vacchi <evacchi@users.noreply.github.com>
2024-03-28 11:05:24 +01:00

82 lines
2.3 KiB
Go

//go:build (!linux && !darwin && !windows) || tinygo
package sysfs
import (
"net"
"syscall"
"github.com/tetratelabs/wazero/experimental/sys"
experimentalsys "github.com/tetratelabs/wazero/experimental/sys"
"github.com/tetratelabs/wazero/internal/fsapi"
socketapi "github.com/tetratelabs/wazero/internal/sock"
)
// MSG_PEEK is a filler value.
const MSG_PEEK = 0x2
func newTCPListenerFile(tl *net.TCPListener) socketapi.TCPSock {
return &unsupportedSockFile{}
}
type unsupportedSockFile struct {
baseSockFile
}
// Accept implements the same method as documented on socketapi.TCPSock
func (f *unsupportedSockFile) Accept() (socketapi.TCPConn, sys.Errno) {
return nil, sys.ENOSYS
}
func _pollSock(conn syscall.Conn, flag fsapi.Pflag, timeoutMillis int32) (bool, sys.Errno) {
return false, sys.ENOTSUP
}
func setNonblockSocket(fd uintptr, enabled bool) sys.Errno {
return sys.ENOTSUP
}
func readSocket(fd uintptr, buf []byte) (int, sys.Errno) {
return -1, sys.ENOTSUP
}
func writeSocket(fd uintptr, buf []byte) (int, sys.Errno) {
return -1, sys.ENOTSUP
}
func recvfrom(fd uintptr, buf []byte, flags int32) (n int, errno sys.Errno) {
return -1, sys.ENOTSUP
}
// syscallConnControl extracts a syscall.RawConn from the given syscall.Conn and applies
// the given fn to a file descriptor, returning an integer or a nonzero syscall.Errno on failure.
//
// syscallConnControl streamlines the pattern of extracting the syscall.Rawconn,
// invoking its syscall.RawConn.Control method, then handling properly the errors that may occur
// within fn or returned by syscall.RawConn.Control itself.
func syscallConnControl(conn syscall.Conn, fn func(fd uintptr) (int, experimentalsys.Errno)) (n int, errno sys.Errno) {
return -1, sys.ENOTSUP
}
// Accept implements the same method as documented on socketapi.TCPSock
func (f *tcpListenerFile) Accept() (socketapi.TCPConn, experimentalsys.Errno) {
return nil, experimentalsys.ENOSYS
}
// Shutdown implements the same method as documented on experimentalsys.Conn
func (f *tcpConnFile) Shutdown(how int) experimentalsys.Errno {
// FIXME: can userland shutdown listeners?
var err error
switch how {
case socketapi.SHUT_RD:
err = f.tc.Close()
case socketapi.SHUT_WR:
err = f.tc.Close()
case socketapi.SHUT_RDWR:
return f.close()
default:
return experimentalsys.EINVAL
}
return experimentalsys.UnwrapOSError(err)
}