Documentation ¶
Overview ¶
Package kcp - A Fast and Reliable ARQ Protocol
Acknowledgement:
skywind3000@github for inventing the KCP protocol xtaci@github for translating to Golang
Index ¶
- Constants
- func DialKCP(src v2net.Address, dest v2net.Destination) (internet.Connection, error)
- func ListenKCP(address v2net.Address, port v2net.Port) (internet.Listener, error)
- type Authenticator
- type Command
- type Config
- type ConnState
- type Connection
- func (this *Connection) Close() error
- func (this *Connection) Elapsed() uint32
- func (this *Connection) FetchInputFrom(conn net.Conn)
- func (this *Connection) ForceTimeout()
- func (this *Connection) LocalAddr() net.Addr
- func (this *Connection) MarkPeerClose()
- func (this *Connection) NotifyTermination()
- func (this *Connection) Read(b []byte) (int, error)
- func (this *Connection) RemoteAddr() net.Addr
- func (this *Connection) Reusable() bool
- func (this *Connection) SetDeadline(t time.Time) error
- func (this *Connection) SetReadDeadline(t time.Time) error
- func (this *Connection) SetReusable(b bool)
- func (this *Connection) SetWriteDeadline(t time.Time) error
- func (this *Connection) Terminate()
- func (this *Connection) Write(b []byte) (int, error)
- type KCP
- func (kcp *KCP) Check(current uint32) uint32
- func (this *KCP) ClearSendQueue()
- func (kcp *KCP) DumpReceivingBuf()
- func (kcp *KCP) Input(data []byte) int
- func (kcp *KCP) NoDelay(interval uint32, resend int, congestionControl bool) int
- func (kcp *KCP) Recv(buffer []byte) (n int)
- func (kcp *KCP) Send(buffer []byte) int
- func (kcp *KCP) Update(current uint32)
- func (kcp *KCP) WaitSnd() uint32
- type Listener
- type Option
- type Output
- type ReceivingWindow
- func (this *ReceivingWindow) Advance()
- func (this *ReceivingWindow) Position(idx uint32) uint32
- func (this *ReceivingWindow) Remove(idx uint32) *Segment
- func (this *ReceivingWindow) RemoveFirst() *Segment
- func (this *ReceivingWindow) Set(idx uint32, value *Segment) bool
- func (this *ReceivingWindow) Size() uint32
- type Segment
- type SendingQueue
- type SimpleAuthenticator
- type Writer
Constants ¶
const ( IKCP_RTO_NDL = 30 // no delay min rto IKCP_RTO_MIN = 100 // normal min rto IKCP_RTO_DEF = 200 IKCP_RTO_MAX = 60000 IKCP_CMD_PUSH = 81 // cmd: push data IKCP_CMD_ACK = 82 // cmd: ack IKCP_WND_SND = 32 IKCP_WND_RCV = 32 IKCP_MTU_DEF = 1350 IKCP_ACK_FAST = 3 IKCP_INTERVAL = 100 IKCP_OVERHEAD = 24 IKCP_DEADLINK = 20 IKCP_THRESH_INIT = 2 IKCP_THRESH_MIN = 2 IKCP_PROBE_INIT = 7000 // 7 secs to probe window size IKCP_PROBE_LIMIT = 120000 // up to 120 secs to probe window )
Variables ¶
This section is empty.
Functions ¶
func DialKCP ¶
func DialKCP(src v2net.Address, dest v2net.Destination) (internet.Connection, error)
Types ¶
type Authenticator ¶ added in v1.17.1
type Authenticator interface { HeaderSize() int // Encrypt encrypts the whole block in src into dst. // Dst and src may point at the same memory. Seal(buffer *alloc.Buffer) // Decrypt decrypts the whole block in src into dst. // Dst and src may point at the same memory. Open(buffer *alloc.Buffer) bool }
func NewSimpleAuthenticator ¶
func NewSimpleAuthenticator() Authenticator
type Config ¶
type Config struct { Mtu uint32 // Maximum transmission unit Tti uint32 UplinkCapacity uint32 DownlinkCapacity uint32 Congestion bool WriteBuffer uint32 }
func DefaultConfig ¶ added in v1.17.1
func DefaultConfig() Config
func (*Config) GetReceivingWindowSize ¶ added in v1.17.1
func (*Config) GetSendingWindowSize ¶ added in v1.17.1
type Connection ¶
Connection is a KCP connection over UDP.
func NewConnection ¶
func NewConnection(conv uint32, writerCloser io.WriteCloser, local *net.UDPAddr, remote *net.UDPAddr, block Authenticator) *Connection
NewConnection create a new KCP connection between local and remote.
func (*Connection) Elapsed ¶
func (this *Connection) Elapsed() uint32
func (*Connection) FetchInputFrom ¶ added in v1.17.1
func (this *Connection) FetchInputFrom(conn net.Conn)
func (*Connection) ForceTimeout ¶ added in v1.17.1
func (this *Connection) ForceTimeout()
func (*Connection) LocalAddr ¶
func (this *Connection) LocalAddr() net.Addr
LocalAddr returns the local network address. The Addr returned is shared by all invocations of LocalAddr, so do not modify it.
func (*Connection) MarkPeerClose ¶ added in v1.17.1
func (this *Connection) MarkPeerClose()
func (*Connection) NotifyTermination ¶ added in v1.17.1
func (this *Connection) NotifyTermination()
func (*Connection) Read ¶
func (this *Connection) Read(b []byte) (int, error)
Read implements the Conn Read method.
func (*Connection) RemoteAddr ¶
func (this *Connection) RemoteAddr() net.Addr
RemoteAddr returns the remote network address. The Addr returned is shared by all invocations of RemoteAddr, so do not modify it.
func (*Connection) Reusable ¶ added in v1.17.1
func (this *Connection) Reusable() bool
func (*Connection) SetDeadline ¶
func (this *Connection) SetDeadline(t time.Time) error
SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline.
func (*Connection) SetReadDeadline ¶
func (this *Connection) SetReadDeadline(t time.Time) error
SetReadDeadline implements the Conn SetReadDeadline method.
func (*Connection) SetReusable ¶ added in v1.17.1
func (this *Connection) SetReusable(b bool)
func (*Connection) SetWriteDeadline ¶
func (this *Connection) SetWriteDeadline(t time.Time) error
SetWriteDeadline implements the Conn SetWriteDeadline method.
func (*Connection) Terminate ¶
func (this *Connection) Terminate()
type KCP ¶ added in v1.17.1
type KCP struct {
// contains filtered or unexported fields
}
KCP defines a single KCP connection
func NewKCP ¶ added in v1.17.1
func NewKCP(conv uint32, mtu uint32, sendingWindowSize uint32, receivingWindowSize uint32, sendingQueueSize uint32, output Output) *KCP
NewKCP create a new kcp control object, 'conv' must equal in two endpoint from the same connection.
func (*KCP) Check ¶ added in v1.17.1
Check determines when should you invoke ikcp_update: returns when you should invoke ikcp_update in millisec, if there is no ikcp_input/_send calling. you can call ikcp_update in that time, instead of call update repeatly. Important to reduce unnacessary ikcp_update invoking. use it to schedule ikcp_update (eg. implementing an epoll-like mechanism, or optimize ikcp_update when handling massive kcp connections)
func (*KCP) ClearSendQueue ¶ added in v1.17.2
func (this *KCP) ClearSendQueue()
func (*KCP) DumpReceivingBuf ¶ added in v1.17.3
func (kcp *KCP) DumpReceivingBuf()
DumpReceivingBuf moves available data from rcv_buf -> rcv_queue @Private
func (*KCP) Input ¶ added in v1.17.1
Input when you received a low level packet (eg. UDP packet), call it
func (*KCP) NoDelay ¶ added in v1.17.1
NoDelay options fastest: ikcp_nodelay(kcp, 1, 20, 2, 1) nodelay: 0:disable(default), 1:enable interval: internal update timer interval in millisec, default is 100ms resend: 0:disable fast resend(default), 1:enable fast resend nc: 0:normal congestion control(default), 1:disable congestion control
func (*KCP) Recv ¶ added in v1.17.1
Recv is user/upper level recv: returns size, returns below zero for EAGAIN
type Listener ¶
Listener defines a server listening for connections
func (*Listener) Accept ¶ added in v1.17.1
func (this *Listener) Accept() (internet.Connection, error)
Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn.
func (*Listener) Addr ¶
Addr returns the listener's network address, The Addr returned is shared by all invocations of Addr, so do not modify it.
func (*Listener) Close ¶
Close stops listening on the UDP address. Already Accepted connections are not closed.
type Output ¶ added in v1.17.1
type Output func(buf []byte)
Output is a closure which captures conn and calls conn.Write
type ReceivingWindow ¶
type ReceivingWindow struct {
// contains filtered or unexported fields
}
func NewReceivingWindow ¶
func NewReceivingWindow(size uint32) *ReceivingWindow
func (*ReceivingWindow) Advance ¶ added in v1.17.3
func (this *ReceivingWindow) Advance()
func (*ReceivingWindow) Position ¶ added in v1.17.3
func (this *ReceivingWindow) Position(idx uint32) uint32
func (*ReceivingWindow) Remove ¶
func (this *ReceivingWindow) Remove(idx uint32) *Segment
func (*ReceivingWindow) RemoveFirst ¶ added in v1.17.3
func (this *ReceivingWindow) RemoveFirst() *Segment
func (*ReceivingWindow) Size ¶ added in v1.17.3
func (this *ReceivingWindow) Size() uint32
type Segment ¶
type Segment struct {
// contains filtered or unexported fields
}
Segment defines a KCP segment
type SendingQueue ¶ added in v1.17.3
type SendingQueue struct {
// contains filtered or unexported fields
}
func NewSendingQueue ¶ added in v1.17.3
func NewSendingQueue(size uint32) *SendingQueue
func (*SendingQueue) Clear ¶ added in v1.17.3
func (this *SendingQueue) Clear()
func (*SendingQueue) IsEmpty ¶ added in v1.17.3
func (this *SendingQueue) IsEmpty() bool
func (*SendingQueue) IsFull ¶ added in v1.17.3
func (this *SendingQueue) IsFull() bool
func (*SendingQueue) Len ¶ added in v1.17.3
func (this *SendingQueue) Len() uint32
func (*SendingQueue) Pop ¶ added in v1.17.3
func (this *SendingQueue) Pop() *Segment
func (*SendingQueue) Push ¶ added in v1.17.3
func (this *SendingQueue) Push(seg *Segment)
type SimpleAuthenticator ¶
type SimpleAuthenticator struct{}
func (*SimpleAuthenticator) HeaderSize ¶ added in v1.17.1
func (this *SimpleAuthenticator) HeaderSize() int
func (*SimpleAuthenticator) Seal ¶
func (this *SimpleAuthenticator) Seal(buffer *alloc.Buffer)