rdt

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2025 License: GPL-3.0 Imports: 13 Imported by: 0

README

RDT

a Reliable Data Transfer protocol.

Example

Server

packetConn, err := net.ListenPacket("udp", "192.168.3.99:22334")
if err != nil {
    panic(err)
}
listener, err := rdt.Listen(packetConn)
if err != nil {
    panic(err)
}

for {
    conn, err := listener.Accept()
    if err != nil {
        panic(err)
    }
    handle(conn)
}

Client

packetConn, err := net.ListenPacket("udp", "192.168.3.98:22335")
if err != nil {
    panic(err)
}
listener, err := rdt.Listen(packetConn)
if err != nil {
    panic(err)
}

conn, err := listener.OpenStream(&net.UDPAddr{
    IP:   net.ParseIP("192.168.3.99"),
    Port: 22334,
})
if err != nil {
    panic(err)
}
...

Documentation

Index

Constants

View Source
const (
	Established = 0
	FIN_WAIT1   = 2
	FIN_WAIT2   = 3
	CLOSED      = 5
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	MTU               int
	Interval          time.Duration
	StatsServerListen string
}

type Option

type Option func(cfg *Config) error

func EnableStatsServer

func EnableStatsServer(listenAddr string) Option

func MTU

func MTU(mtu int) Option

func StateInterval

func StateInterval(interval time.Duration) Option

type RDTListener

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

RDTListener reliable data transmission listener

func Listen

func Listen(conn net.PacketConn, opts ...Option) (*RDTListener, error)

func (*RDTListener) Accept

func (l *RDTListener) Accept() (net.Conn, error)

Accept accept a connection from addr (0RTT)

func (*RDTListener) Addr

func (l *RDTListener) Addr() net.Addr

func (*RDTListener) Close

func (l *RDTListener) Close() error

func (*RDTListener) OpenStream

func (l *RDTListener) OpenStream(addr net.Addr) (net.Conn, error)

OpenStream open a connection to addr (0RTT)

type Stat

type Stat struct {
	RemoteAddr string `json:"remoteAddr"`
	RecvNO     uint32 `json:"recvNO"`
	SentNO     uint32 `json:"sentNO"`
	ACKNO      uint32 `json:"ackNO"`
	State      int    `json:"state"`
	RecvPool   int    `json:"recvPool"`
	SendPool   int    `json:"sendPool"`
	Resend     uint32 `json:"resend"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL