Black Lives Matter. Support the Equal Justice Initiative.

Package socktest

import "net/internal/socktest"
Overview
Index

Overview ▾

Package socktest provides utilities for socket testing.

type AfterFilter

An AfterFilter represents a socket system call filter after an execution of a system call.

It will only be executed after a system call for a socket that has an entry in internal table. If the filter returns a non-nil error, the system call function returns the non-nil error.

type AfterFilter func(*Status) error

A Cookie represents a 3-tuple of a socket; address family, socket type and protocol number.

type Cookie uint64

func (Cookie) Family

func (c Cookie) Family() int

Family returns an address family.

func (Cookie) Protocol

func (c Cookie) Protocol() int

Protocol returns a protocol number.

func (Cookie) Type

func (c Cookie) Type() int

Type returns a socket type.

type Filter

A Filter represents a socket system call filter.

It will only be executed before a system call for a socket that has an entry in internal table. If the filter returns a non-nil error, the execution of system call will be canceled and the system call function returns the non-nil error. It can return a non-nil AfterFilter for filtering after the execution of the system call.

type Filter func(*Status) (AfterFilter, error)

type FilterType

A FilterType represents a filter type.

type FilterType int
const (
    FilterSocket        FilterType = iota // for Socket
    FilterConnect                         // for Connect or ConnectEx
    FilterListen                          // for Listen
    FilterAccept                          // for Accept, Accept4 or AcceptEx
    FilterGetsockoptInt                   // for GetsockoptInt
    FilterClose                           // for Close or Closesocket
)

type Sockets

Sockets maps a socket descriptor to the status of socket.

type Sockets map[int]Status

type Stat

A Stat represents a per-cookie socket statistics.

type Stat struct {
    Family   int // address family
    Type     int // socket type
    Protocol int // protocol number

    Opened    uint64 // number of sockets opened
    Connected uint64 // number of sockets connected
    Listened  uint64 // number of sockets listened
    Accepted  uint64 // number of sockets accepted
    Closed    uint64 // number of sockets closed

    OpenFailed    uint64 // number of sockets open failed
    ConnectFailed uint64 // number of sockets connect failed
    ListenFailed  uint64 // number of sockets listen failed
    AcceptFailed  uint64 // number of sockets accept failed
    CloseFailed   uint64 // number of sockets close failed
}

func (Stat) String

func (st Stat) String() string

type Status

A Status represents the status of a socket.

type Status struct {
    Cookie    Cookie
    Err       error // error status of socket system call
    SocketErr error // error status of socket by SO_ERROR
}

func (Status) String

func (so Status) String() string

type Switch

A Switch represents a callpath point switch for socket system calls.

type Switch struct {
    // contains filtered or unexported fields
}

func (*Switch) Accept

func (sw *Switch) Accept(s int) (ns int, sa syscall.Sockaddr, err error)

Accept wraps syscall.Accept.

func (*Switch) Accept4

func (sw *Switch) Accept4(s, flags int) (ns int, sa syscall.Sockaddr, err error)

Accept4 wraps syscall.Accept4.

func (*Switch) Close

func (sw *Switch) Close(s int) (err error)

Close wraps syscall.Close.

func (*Switch) Connect

func (sw *Switch) Connect(s int, sa syscall.Sockaddr) (err error)

Connect wraps syscall.Connect.

func (*Switch) GetsockoptInt

func (sw *Switch) GetsockoptInt(s, level, opt int) (soerr int, err error)

GetsockoptInt wraps syscall.GetsockoptInt.

func (*Switch) Listen

func (sw *Switch) Listen(s, backlog int) (err error)

Listen wraps syscall.Listen.

func (*Switch) Set

func (sw *Switch) Set(t FilterType, f Filter)

Set deploys the socket system call filter f for the filter type t.

func (*Switch) Socket

func (sw *Switch) Socket(family, sotype, proto int) (s int, err error)

Socket wraps syscall.Socket.

func (*Switch) Sockets

func (sw *Switch) Sockets() Sockets

Sockets returns mappings of socket descriptor to socket status.

func (*Switch) Stats

func (sw *Switch) Stats() []Stat

Stats returns a list of per-cookie socket statistics.