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 AckList
- type AckSegment
- type AuthenticationWriter
- type Authenticator
- type BufferedSegmentWriter
- type CmdOnlySegment
- type Config
- type Connection
- func (this *Connection) Close() error
- func (this *Connection) Elapsed() uint32
- func (this *Connection) FetchInputFrom(conn io.Reader)
- func (this *Connection) HandleOption(opt SegmentOption)
- func (this *Connection) Input(data []byte) int
- func (this *Connection) LocalAddr() net.Addr
- func (this *Connection) OnPeerClosed()
- 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) SetState(state State)
- func (this *Connection) SetWriteDeadline(t time.Time) error
- func (this *Connection) State() State
- func (this *Connection) Terminate()
- func (this *Connection) Write(b []byte) (int, error)
- type DataSegment
- type Listener
- type ReceivingQueue
- type ReceivingWindow
- func (this *ReceivingWindow) Advance()
- func (this *ReceivingWindow) Position(idx uint32) uint32
- func (this *ReceivingWindow) Remove(idx uint32) *DataSegment
- func (this *ReceivingWindow) RemoveFirst() *DataSegment
- func (this *ReceivingWindow) Set(idx uint32, value *DataSegment) bool
- func (this *ReceivingWindow) Size() uint32
- type ReceivingWorker
- func (this *ReceivingWorker) CloseRead()
- func (this *ReceivingWorker) Flush(current uint32)
- func (this *ReceivingWorker) MarkPingNecessary(b bool)
- func (this *ReceivingWorker) PingNecessary() bool
- func (this *ReceivingWorker) ProcessSegment(seg *DataSegment)
- func (this *ReceivingWorker) ProcessSendingNext(number uint32)
- func (this *ReceivingWorker) Read(b []byte) int
- func (this *ReceivingWorker) Write(seg Segment)
- type RountTripInfo
- type Segment
- type SegmentCommand
- type SegmentOption
- type SegmentWriter
- type SendingQueue
- type SendingWindow
- func (this *SendingWindow) Clear(una uint32)
- func (this *SendingWindow) First() *DataSegment
- func (this *SendingWindow) Flush(current uint32, resend uint32, rto uint32, maxInFlightSize uint32)
- func (this *SendingWindow) HandleFastAck(number uint32)
- func (this *SendingWindow) IsFull() bool
- func (this *SendingWindow) Len() int
- func (this *SendingWindow) Push(seg *DataSegment)
- func (this *SendingWindow) Remove(idx uint32)
- func (this *SendingWindow) Size() uint32
- type SendingWorker
- func (this *SendingWorker) CloseWrite()
- func (this *SendingWorker) FindFirstUnacknowledged()
- func (this *SendingWorker) Flush(current uint32)
- func (this *SendingWorker) MarkPingNecessary(b bool)
- func (this *SendingWorker) OnPacketLoss(lossRate uint32)
- func (this *SendingWorker) PingNecessary() bool
- func (this *SendingWorker) ProcessAck(number uint32)
- func (this *SendingWorker) ProcessReceivingNext(nextNumber uint32)
- func (this *SendingWorker) ProcessReceivingNextWithoutLock(nextNumber uint32)
- func (this *SendingWorker) ProcessSegment(current uint32, seg *AckSegment)
- func (this *SendingWorker) Push(b []byte) int
- func (this *SendingWorker) Write(seg Segment)
- type SimpleAuthenticator
- type State
- type Writer
Constants ¶
const (
DataSegmentOverhead = 18
)
Variables ¶
This section is empty.
Functions ¶
func DialKCP ¶
func DialKCP(src v2net.Address, dest v2net.Destination) (internet.Connection, error)
Types ¶
type AckList ¶ added in v1.18.1
type AckList struct {
// contains filtered or unexported fields
}
func NewAckList ¶ added in v1.18.1
func NewAckList(writer SegmentWriter) *AckList
type AckSegment ¶ added in v1.18.1
type AckSegment struct { Conv uint16 Opt SegmentOption ReceivingWindow uint32 ReceivingNext uint32 Count byte NumberList []uint32 TimestampList []uint32 }
func NewAckSegment ¶ added in v1.19.1
func NewAckSegment() *AckSegment
func (*AckSegment) ByteSize ¶ added in v1.18.1
func (this *AckSegment) ByteSize() int
func (*AckSegment) Bytes ¶ added in v1.18.1
func (this *AckSegment) Bytes(b []byte) []byte
func (*AckSegment) IsFull ¶ added in v1.19.1
func (this *AckSegment) IsFull() bool
func (*AckSegment) PutNumber ¶ added in v1.19.1
func (this *AckSegment) PutNumber(number uint32, timestamp uint32)
func (*AckSegment) Release ¶ added in v1.18.1
func (this *AckSegment) Release()
type AuthenticationWriter ¶ added in v1.18.1
type AuthenticationWriter struct { Authenticator Authenticator Writer io.Writer }
func (*AuthenticationWriter) Mtu ¶ added in v1.18.1
func (this *AuthenticationWriter) Mtu() uint32
func (*AuthenticationWriter) Release ¶ added in v1.18.1
func (this *AuthenticationWriter) Release()
func (*AuthenticationWriter) Write ¶ added in v1.18.1
func (this *AuthenticationWriter) Write(payload *alloc.Buffer) error
type Authenticator ¶
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 BufferedSegmentWriter ¶ added in v1.18.1
func NewSegmentWriter ¶ added in v1.18.1
func NewSegmentWriter(writer *AuthenticationWriter) *BufferedSegmentWriter
func (*BufferedSegmentWriter) Flush ¶ added in v1.18.1
func (this *BufferedSegmentWriter) Flush()
func (*BufferedSegmentWriter) FlushWithoutLock ¶ added in v1.18.1
func (this *BufferedSegmentWriter) FlushWithoutLock()
func (*BufferedSegmentWriter) Write ¶ added in v1.18.1
func (this *BufferedSegmentWriter) Write(seg Segment)
type CmdOnlySegment ¶ added in v1.18.1
type CmdOnlySegment struct { Conv uint16 Cmd SegmentCommand Opt SegmentOption SendingNext uint32 ReceivinNext uint32 }
func NewCmdOnlySegment ¶ added in v1.19.1
func NewCmdOnlySegment() *CmdOnlySegment
func (*CmdOnlySegment) ByteSize ¶ added in v1.18.1
func (this *CmdOnlySegment) ByteSize() int
func (*CmdOnlySegment) Bytes ¶ added in v1.18.1
func (this *CmdOnlySegment) Bytes(b []byte) []byte
func (*CmdOnlySegment) Release ¶ added in v1.18.1
func (this *CmdOnlySegment) Release()
type Config ¶
type Config struct { Mtu uint32 // Maximum transmission unit Tti uint32 UplinkCapacity uint32 DownlinkCapacity uint32 Congestion bool WriteBuffer uint32 ReadBuffer uint32 }
func (*Config) GetReceivingQueueSize ¶ added in v1.18.1
func (*Config) GetSendingInFlightSize ¶ added in v1.18.2
func (*Config) GetSendingQueueSize ¶ added in v1.18.1
type Connection ¶
type Connection struct {
// contains filtered or unexported fields
}
Connection is a KCP connection over UDP.
func NewConnection ¶
func NewConnection(conv uint16, 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 ¶
func (this *Connection) FetchInputFrom(conn io.Reader)
func (*Connection) HandleOption ¶ added in v1.19.1
func (this *Connection) HandleOption(opt SegmentOption)
func (*Connection) Input ¶ added in v1.19.1
func (this *Connection) Input(data []byte) int
Input when you received a low level packet (eg. UDP packet), call it
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) OnPeerClosed ¶ added in v1.19.1
func (this *Connection) OnPeerClosed()
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 ¶
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 ¶
func (this *Connection) SetReusable(b bool)
func (*Connection) SetState ¶ added in v1.19.1
func (this *Connection) SetState(state State)
func (*Connection) SetWriteDeadline ¶
func (this *Connection) SetWriteDeadline(t time.Time) error
SetWriteDeadline implements the Conn SetWriteDeadline method.
func (*Connection) State ¶ added in v1.19.1
func (this *Connection) State() State
func (*Connection) Terminate ¶
func (this *Connection) Terminate()
func (*Connection) Write ¶
func (this *Connection) Write(b []byte) (int, error)
Write implements the Conn Write method.
type DataSegment ¶ added in v1.18.1
type DataSegment struct { Conv uint16 Opt SegmentOption Timestamp uint32 Number uint32 SendingNext uint32 Data *alloc.Buffer // contains filtered or unexported fields }
func NewDataSegment ¶ added in v1.19.1
func NewDataSegment() *DataSegment
func (*DataSegment) ByteSize ¶ added in v1.18.1
func (this *DataSegment) ByteSize() int
func (*DataSegment) Bytes ¶ added in v1.18.1
func (this *DataSegment) Bytes(b []byte) []byte
func (*DataSegment) Release ¶ added in v1.18.1
func (this *DataSegment) Release()
type Listener ¶
Listener defines a server listening for connections
func (*Listener) Accept ¶
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 ReceivingQueue ¶ added in v1.18.1
type ReceivingQueue struct {
// contains filtered or unexported fields
}
func NewReceivingQueue ¶ added in v1.18.1
func NewReceivingQueue(size uint32) *ReceivingQueue
func (*ReceivingQueue) Close ¶ added in v1.18.1
func (this *ReceivingQueue) Close()
func (*ReceivingQueue) IsEmpty ¶ added in v1.19.1
func (this *ReceivingQueue) IsEmpty() bool
func (*ReceivingQueue) IsFull ¶ added in v1.19.1
func (this *ReceivingQueue) IsFull() bool
func (*ReceivingQueue) Put ¶ added in v1.18.1
func (this *ReceivingQueue) Put(payload *alloc.Buffer)
func (*ReceivingQueue) Read ¶ added in v1.18.1
func (this *ReceivingQueue) Read(buf []byte) int
type ReceivingWindow ¶ added in v1.17.3
type ReceivingWindow struct {
// contains filtered or unexported fields
}
func NewReceivingWindow ¶ added in v1.17.3
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 ¶ added in v1.17.3
func (this *ReceivingWindow) Remove(idx uint32) *DataSegment
func (*ReceivingWindow) RemoveFirst ¶ added in v1.17.3
func (this *ReceivingWindow) RemoveFirst() *DataSegment
func (*ReceivingWindow) Set ¶ added in v1.17.3
func (this *ReceivingWindow) Set(idx uint32, value *DataSegment) bool
func (*ReceivingWindow) Size ¶ added in v1.17.3
func (this *ReceivingWindow) Size() uint32
type ReceivingWorker ¶ added in v1.18.1
func NewReceivingWorker ¶ added in v1.18.1
func NewReceivingWorker(kcp *Connection) *ReceivingWorker
func (*ReceivingWorker) CloseRead ¶ added in v1.18.1
func (this *ReceivingWorker) CloseRead()
func (*ReceivingWorker) Flush ¶ added in v1.18.1
func (this *ReceivingWorker) Flush(current uint32)
func (*ReceivingWorker) MarkPingNecessary ¶ added in v1.19.1
func (this *ReceivingWorker) MarkPingNecessary(b bool)
func (*ReceivingWorker) PingNecessary ¶ added in v1.18.1
func (this *ReceivingWorker) PingNecessary() bool
func (*ReceivingWorker) ProcessSegment ¶ added in v1.18.1
func (this *ReceivingWorker) ProcessSegment(seg *DataSegment)
func (*ReceivingWorker) ProcessSendingNext ¶ added in v1.18.1
func (this *ReceivingWorker) ProcessSendingNext(number uint32)
func (*ReceivingWorker) Read ¶ added in v1.18.1
func (this *ReceivingWorker) Read(b []byte) int
func (*ReceivingWorker) Write ¶ added in v1.18.1
func (this *ReceivingWorker) Write(seg Segment)
type RountTripInfo ¶ added in v1.19.1
func (*RountTripInfo) SmoothedTime ¶ added in v1.19.1
func (this *RountTripInfo) SmoothedTime() uint32
func (*RountTripInfo) Timeout ¶ added in v1.19.1
func (this *RountTripInfo) Timeout() uint32
func (*RountTripInfo) Update ¶ added in v1.19.1
func (this *RountTripInfo) Update(rtt uint32)
type SegmentCommand ¶ added in v1.18.1
type SegmentCommand byte
const ( SegmentCommandACK SegmentCommand = 0 SegmentCommandData SegmentCommand = 1 SegmentCommandTerminated SegmentCommand = 2 SegmentCommandPing SegmentCommand = 3 )
type SegmentOption ¶ added in v1.18.1
type SegmentOption byte
const (
SegmentOptionClose SegmentOption = 1
)
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() *DataSegment
func (*SendingQueue) Push ¶ added in v1.17.3
func (this *SendingQueue) Push(seg *DataSegment)
type SendingWindow ¶ added in v1.18.1
type SendingWindow struct {
// contains filtered or unexported fields
}
func NewSendingWindow ¶ added in v1.18.1
func NewSendingWindow(size uint32, writer SegmentWriter, onPacketLoss func(uint32)) *SendingWindow
func (*SendingWindow) Clear ¶ added in v1.18.1
func (this *SendingWindow) Clear(una uint32)
func (*SendingWindow) First ¶ added in v1.18.1
func (this *SendingWindow) First() *DataSegment
func (*SendingWindow) Flush ¶ added in v1.18.1
func (this *SendingWindow) Flush(current uint32, resend uint32, rto uint32, maxInFlightSize uint32)
func (*SendingWindow) HandleFastAck ¶ added in v1.18.1
func (this *SendingWindow) HandleFastAck(number uint32)
func (*SendingWindow) IsFull ¶ added in v1.18.2
func (this *SendingWindow) IsFull() bool
func (*SendingWindow) Len ¶ added in v1.18.1
func (this *SendingWindow) Len() int
func (*SendingWindow) Push ¶ added in v1.18.1
func (this *SendingWindow) Push(seg *DataSegment)
func (*SendingWindow) Remove ¶ added in v1.18.1
func (this *SendingWindow) Remove(idx uint32)
func (*SendingWindow) Size ¶ added in v1.18.2
func (this *SendingWindow) Size() uint32
type SendingWorker ¶ added in v1.18.1
func NewSendingWorker ¶ added in v1.18.1
func NewSendingWorker(kcp *Connection) *SendingWorker
func (*SendingWorker) CloseWrite ¶ added in v1.18.1
func (this *SendingWorker) CloseWrite()
func (*SendingWorker) FindFirstUnacknowledged ¶ added in v1.18.1
func (this *SendingWorker) FindFirstUnacknowledged()
@Private
func (*SendingWorker) Flush ¶ added in v1.18.1
func (this *SendingWorker) Flush(current uint32)
func (*SendingWorker) MarkPingNecessary ¶ added in v1.19.1
func (this *SendingWorker) MarkPingNecessary(b bool)
func (*SendingWorker) OnPacketLoss ¶ added in v1.18.1
func (this *SendingWorker) OnPacketLoss(lossRate uint32)
func (*SendingWorker) PingNecessary ¶ added in v1.18.1
func (this *SendingWorker) PingNecessary() bool
func (*SendingWorker) ProcessAck ¶ added in v1.18.1
func (this *SendingWorker) ProcessAck(number uint32)
@Private
func (*SendingWorker) ProcessReceivingNext ¶ added in v1.18.1
func (this *SendingWorker) ProcessReceivingNext(nextNumber uint32)
func (*SendingWorker) ProcessReceivingNextWithoutLock ¶ added in v1.19.1
func (this *SendingWorker) ProcessReceivingNextWithoutLock(nextNumber uint32)
func (*SendingWorker) ProcessSegment ¶ added in v1.18.2
func (this *SendingWorker) ProcessSegment(current uint32, seg *AckSegment)
func (*SendingWorker) Push ¶ added in v1.18.1
func (this *SendingWorker) Push(b []byte) int
func (*SendingWorker) Write ¶ added in v1.18.1
func (this *SendingWorker) Write(seg Segment)
@Private
type SimpleAuthenticator ¶
type SimpleAuthenticator struct{}
func (*SimpleAuthenticator) HeaderSize ¶
func (this *SimpleAuthenticator) HeaderSize() int
func (*SimpleAuthenticator) Open ¶
func (this *SimpleAuthenticator) Open(buffer *alloc.Buffer) bool
func (*SimpleAuthenticator) Seal ¶
func (this *SimpleAuthenticator) Seal(buffer *alloc.Buffer)