Files
kata-containers/virtcontainers/vendor/github.com/mdlayher/vsock/fd_linux.go
Samuel Ortiz 24eff72d82 virtcontainers: Initial import
This is a virtcontainers 1.0.8 import into Kata Containers runtime.

virtcontainers is a Go library designed to manage hardware virtualized
pods and containers. It is the core Clear Containers framework and will
become the core Kata Containers framework, as discussed at
https://github.com/kata-containers/runtime/issues/33

Some more more pointers:

virtcontainers README, including some design and architecure notes:
https://github.com/containers/virtcontainers/blob/master/README.md

virtcontainers 1.0 API:
https://github.com/containers/virtcontainers/blob/master/documentation/api/1.0/api.md

Fixes #40

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2018-03-13 00:49:46 +01:00

44 lines
1.3 KiB
Go

package vsock
import (
"os"
"golang.org/x/sys/unix"
)
// A fd is an interface for a file descriptor, used to perform system
// calls or swap them out for tests.
type fd interface {
Accept4(flags int) (fd, unix.Sockaddr, error)
Bind(sa unix.Sockaddr) error
Connect(sa unix.Sockaddr) error
Close() error
Getsockname() (unix.Sockaddr, error)
Listen(n int) error
NewFile(name string) *os.File
}
var _ fd = &sysFD{}
// sysFD is the system call implementation of fd.
type sysFD struct {
fd int
}
func (fd *sysFD) Accept4(flags int) (fd, unix.Sockaddr, error) {
// Returns a regular file descriptor, must be wrapped in another
// sysFD for it to work properly.
nfd, sa, err := unix.Accept4(fd.fd, flags)
if err != nil {
return nil, nil, err
}
return &sysFD{fd: nfd}, sa, nil
}
func (fd *sysFD) Bind(sa unix.Sockaddr) error { return unix.Bind(fd.fd, sa) }
func (fd *sysFD) Close() error { return unix.Close(fd.fd) }
func (fd *sysFD) Connect(sa unix.Sockaddr) error { return unix.Connect(fd.fd, sa) }
func (fd *sysFD) Listen(n int) error { return unix.Listen(fd.fd, n) }
func (fd *sysFD) NewFile(name string) *os.File { return os.NewFile(uintptr(fd.fd), name) }
func (fd *sysFD) Getsockname() (unix.Sockaddr, error) { return unix.Getsockname(fd.fd) }