Documentation
¶
Overview ¶
if build tag debug is not set, then debugLog will ingore in compile time
Package kcp-go is a Reliable-UDP library for golang.
This library intents to provide a smooth, resilient, ordered, error-checked and anonymous delivery of streams over UDP packets.
The interfaces of this package aims to be compatible with net.Conn in standard library, but offers powerful features for advanced users.
Index ¶
- Constants
- func Dial(raddr string) (net.Conn, error)
- func Listen(laddr string) (net.Listener, error)
- func NewEntropy() io.Reader
- func NewEntropyAES() io.Reader
- func NewEntropyChacha8() io.Reader
- func SetEntropy(r io.Reader)
- type BlockCrypt
- func NewAEADCrypt(aead cipher.AEAD) BlockCrypt
- func NewAESBlockCrypt(key []byte) (BlockCrypt, error)
- func NewAESGCMCrypt(key []byte) (BlockCrypt, error)
- func NewBlowfishBlockCrypt(key []byte) (BlockCrypt, error)
- func NewCast5BlockCrypt(key []byte) (BlockCrypt, error)
- func NewNoneBlockCrypt(key []byte) (BlockCrypt, error)
- func NewSM4BlockCrypt(key []byte) (BlockCrypt, error)
- func NewSalsa20BlockCrypt(key []byte) (BlockCrypt, error)
- func NewSimpleXORBlockCrypt(key []byte) (BlockCrypt, error)
- func NewTEABlockCrypt(key []byte) (BlockCrypt, error)
- func NewTripleDESBlockCrypt(key []byte) (BlockCrypt, error)
- func NewTwofishBlockCrypt(key []byte) (BlockCrypt, error)
- func NewXTEABlockCrypt(key []byte) (BlockCrypt, error)
- type FlushType
- type KCP
- func (kcp *KCP) Check() uint32
- func (kcp *KCP) Input(data []byte, pktType PacketType, ackNoDelay bool) int
- func (kcp *KCP) NoDelay(nodelay, interval, resend, nc int) int
- func (kcp *KCP) PeekSize() (length int)
- func (kcp *KCP) Recv(buffer []byte) (n int)
- func (kcp *KCP) Send(buffer []byte) int
- func (kcp *KCP) SetLogger(mask KCPLogType, logger logoutput_callback)
- func (kcp *KCP) SetMtu(mtu int) int
- func (kcp *KCP) Update()
- func (kcp *KCP) WaitSnd() int
- func (kcp *KCP) WndSize(sndwnd, rcvwnd int) int
- type KCPLogType
- type Listener
- func (l *Listener) Accept() (net.Conn, error)
- func (l *Listener) AcceptKCP() (*UDPSession, error)
- func (l *Listener) Addr() net.Addr
- func (l *Listener) Close() error
- func (l *Listener) Control(f func(conn net.PacketConn) error) error
- func (l *Listener) SetDSCP(dscp int) error
- func (l *Listener) SetDeadline(t time.Time) error
- func (l *Listener) SetReadBuffer(bytes int) error
- func (l *Listener) SetReadDeadline(t time.Time) error
- func (l *Listener) SetWriteBuffer(bytes int) error
- func (l *Listener) SetWriteDeadline(t time.Time) error
- type OOBCallBackType
- type PacketType
- type RingBuffer
- func (r *RingBuffer[T]) Clear()
- func (r *RingBuffer[T]) Discard(n int) int
- func (r *RingBuffer[T]) ForEach(fn func(*T) bool)
- func (r *RingBuffer[T]) ForEachReverse(fn func(*T) bool)
- func (r *RingBuffer[T]) IsEmpty() bool
- func (r *RingBuffer[T]) IsFull() bool
- func (r *RingBuffer[T]) Len() int
- func (r *RingBuffer[T]) MaxLen() int
- func (r *RingBuffer[T]) Peek() (*T, bool)
- func (r *RingBuffer[T]) Pop() (T, bool)
- func (r *RingBuffer[T]) Push(v T)
- type Snmp
- type TimedSched
- type UDPSession
- func DialWithOptions(raddr string, block BlockCrypt, dataShards, parityShards int) (*UDPSession, error)
- func NewConn(raddr string, block BlockCrypt, dataShards, parityShards int, ...) (*UDPSession, error)
- func NewConn2(raddr net.Addr, block BlockCrypt, dataShards, parityShards int, ...) (*UDPSession, error)
- func NewConn3(convid uint32, raddr net.Addr, block BlockCrypt, dataShards, parityShards int, ...) (*UDPSession, error)
- func NewConn4(convid uint32, raddr net.Addr, block BlockCrypt, dataShards, parityShards int, ...) (*UDPSession, error)
- func (s *UDPSession) Close() error
- func (s *UDPSession) Control(f func(conn net.PacketConn) error) error
- func (s *UDPSession) GetConv() uint32
- func (s *UDPSession) GetOOBMaxSize() int
- func (s *UDPSession) GetRTO() uint32
- func (s *UDPSession) GetSRTT() int32
- func (s *UDPSession) GetSRTTVar() int32
- func (s *UDPSession) LocalAddr() net.Addr
- func (s *UDPSession) Read(b []byte) (n int, err error)
- func (s *UDPSession) RemoteAddr() net.Addr
- func (s *UDPSession) SendOOB(data []byte) error
- func (s *UDPSession) SetACKNoDelay(nodelay bool)
- func (s *UDPSession) SetDSCP(dscp int) error
- func (s *UDPSession) SetDUP(dup int)
- func (s *UDPSession) SetDeadline(t time.Time) error
- func (s *UDPSession) SetLogger(mask KCPLogType, logger logoutput_callback)
- func (s *UDPSession) SetMtu(mtu int) bool
- func (s *UDPSession) SetNoDelay(nodelay, interval, resend, nc int)
- func (s *UDPSession) SetOOBHandler(callback OOBCallBackType) error
- func (s *UDPSession) SetRateLimit(bytesPerSecond uint32)
- func (s *UDPSession) SetReadBuffer(bytes int) error
- func (s *UDPSession) SetReadDeadline(t time.Time) error
- func (s *UDPSession) SetStreamMode(enable bool)deprecated
- func (s *UDPSession) SetWindowSize(sndwnd, rcvwnd int)
- func (s *UDPSession) SetWriteBuffer(bytes int) error
- func (s *UDPSession) SetWriteDeadline(t time.Time) error
- func (s *UDPSession) SetWriteDelay(delay bool)
- func (s *UDPSession) Write(b []byte) (n int, err error)
- func (s *UDPSession) WriteBuffers(v [][]byte) (n int, err error)
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_CMD_WASK = 83 // cmd: window probe (ask) IKCP_CMD_WINS = 84 // cmd: window size (tell) IKCP_ASK_SEND = 1 // need to send IKCP_CMD_WASK IKCP_ASK_TELL = 2 // need to send IKCP_CMD_WINS IKCP_WND_SND = 32 IKCP_WND_RCV = 32 IKCP_MTU_DEF = 1400 IKCP_ACK_FAST = 3 IKCP_INTERVAL = 100 IKCP_OVERHEAD = 24 IKCP_DEADLINK = 20 IKCP_THRESH_INIT = 2 IKCP_THRESH_MIN = 2 IKCP_PROBE_INIT = 500 // 500ms to probe window size IKCP_PROBE_LIMIT = 120000 // up to 120 secs to probe window IKCP_SN_OFFSET = 12 )
const ( IKCP_LOG_OUTPUT_ALL = IKCP_LOG_OUTPUT | IKCP_LOG_OUT_ACK | IKCP_LOG_OUT_PUSH | IKCP_LOG_OUT_WASK | IKCP_LOG_OUT_WINS IKCP_LOG_INPUT_ALL = IKCP_LOG_INPUT | IKCP_LOG_IN_ACK | IKCP_LOG_IN_PUSH | IKCP_LOG_IN_WASK | IKCP_LOG_IN_WINS IKCP_LOG_ALL = IKCP_LOG_OUTPUT_ALL | IKCP_LOG_INPUT_ALL | IKCP_LOG_SEND | IKCP_LOG_RECV )
const ( RINGBUFFER_MIN = 8 RINGBUFFER_EXP = 1024 )
Variables ¶
This section is empty.
Functions ¶
func Dial ¶
Dial connects to the remote address "raddr" on the network "udp" without encryption and FEC
func Listen ¶
Listen listens for incoming KCP packets addressed to the local address laddr on the network "udp",
func NewEntropy ¶ added in v5.6.48
NewEntropy creates a new entropy source.
func NewEntropyAES ¶ added in v5.6.48
NewEntropyAES creates a new AES-based entropy source.
func NewEntropyChacha8 ¶ added in v5.6.48
NewEntropyChacha8 creates a new ChaCha8-based entropy source.
func SetEntropy ¶ added in v5.6.48
SetEntropy sets the global entropy source used by fillRand.
Types ¶
type BlockCrypt ¶
type BlockCrypt interface {
// Encrypt encrypts the whole block in src into dst.
// Dst and src may point at the same memory.
Encrypt(dst, src []byte)
// Decrypt decrypts the whole block in src into dst.
// Dst and src may point at the same memory.
Decrypt(dst, src []byte)
}
BlockCrypt defines encryption/decryption methods for a given byte slice. Notes on implementing: the data to be encrypted contains a builtin nonce at the first 16 bytes
func NewAEADCrypt ¶ added in v5.6.49
func NewAEADCrypt(aead cipher.AEAD) BlockCrypt
NewAEADCrypt creates an AEAD BlockCrypt instance from an existing cipher.AEAD
func NewAESBlockCrypt ¶
func NewAESBlockCrypt(key []byte) (BlockCrypt, error)
NewAESBlockCrypt https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
func NewAESGCMCrypt ¶ added in v5.6.49
func NewAESGCMCrypt(key []byte) (BlockCrypt, error)
NewAESGCMCrypt creates an AEAD BlockCrypt instance using AES-GCM key must be either 16, 24, or 32 bytes to select AES-128, AES-192, or AES-256.
func NewBlowfishBlockCrypt ¶
func NewBlowfishBlockCrypt(key []byte) (BlockCrypt, error)
NewBlowfishBlockCrypt https://en.wikipedia.org/wiki/Blowfish_(cipher)
func NewCast5BlockCrypt ¶
func NewCast5BlockCrypt(key []byte) (BlockCrypt, error)
NewCast5BlockCrypt https://en.wikipedia.org/wiki/CAST-128
func NewNoneBlockCrypt ¶
func NewNoneBlockCrypt(key []byte) (BlockCrypt, error)
NewNoneBlockCrypt does nothing but copying
func NewSM4BlockCrypt ¶
func NewSM4BlockCrypt(key []byte) (BlockCrypt, error)
NewSM4BlockCrypt https://github.com/tjfoc/gmsm/tree/master/sm4
func NewSalsa20BlockCrypt ¶
func NewSalsa20BlockCrypt(key []byte) (BlockCrypt, error)
NewSalsa20BlockCrypt https://en.wikipedia.org/wiki/Salsa20
func NewSimpleXORBlockCrypt ¶
func NewSimpleXORBlockCrypt(key []byte) (BlockCrypt, error)
NewSimpleXORBlockCrypt simple xor with key expanding
func NewTEABlockCrypt ¶
func NewTEABlockCrypt(key []byte) (BlockCrypt, error)
NewTEABlockCrypt https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm
func NewTripleDESBlockCrypt ¶
func NewTripleDESBlockCrypt(key []byte) (BlockCrypt, error)
NewTripleDESBlockCrypt https://en.wikipedia.org/wiki/Triple_DES
func NewTwofishBlockCrypt ¶
func NewTwofishBlockCrypt(key []byte) (BlockCrypt, error)
NewTwofishBlockCrypt https://en.wikipedia.org/wiki/Twofish
func NewXTEABlockCrypt ¶
func NewXTEABlockCrypt(key []byte) (BlockCrypt, error)
NewXTEABlockCrypt https://en.wikipedia.org/wiki/XTEA
type KCP ¶
type KCP struct {
// contains filtered or unexported fields
}
KCP defines a single KCP connection
func NewKCP ¶
NewKCP create a new kcp state machine
'conv' must be equal in the connection peers, or else data will be silently rejected.
'output' function will be called whenever these is data to be sent on wire.
func (*KCP) Check ¶
(deprecated)
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) Input ¶
func (kcp *KCP) Input(data []byte, pktType PacketType, ackNoDelay bool) int
Input a packet into kcp state machine.
'regular' indicates it's a real data packet from remote, and it means it's not generated from ReedSolomon codecs.
'ackNoDelay' will trigger immediate ACK, but surely it will not be efficient in bandwidth
func (*KCP) NoDelay ¶
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 ¶
Receive data from kcp state machine
Return number of bytes read.
Return -1 when there is no readable data.
Return -2 if len(buffer) is smaller than kcp.PeekSize().
func (*KCP) SetLogger ¶ added in v5.6.39
func (kcp *KCP) SetLogger(mask KCPLogType, logger logoutput_callback)
SetLogger configures the trace logger
func (*KCP) Update ¶
func (kcp *KCP) Update()
(deprecated)
Update updates state (call it repeatedly, every 10ms-100ms), or you can ask ikcp_check when to call it again (without ikcp_input/_send calling). 'current' - current timestamp in millisec.
type KCPLogType ¶ added in v5.6.39
type KCPLogType int32
const ( IKCP_LOG_OUTPUT KCPLogType = 1 << iota IKCP_LOG_INPUT IKCP_LOG_SEND IKCP_LOG_RECV IKCP_LOG_OUT_ACK IKCP_LOG_OUT_PUSH IKCP_LOG_OUT_WASK IKCP_LOG_OUT_WINS IKCP_LOG_IN_ACK IKCP_LOG_IN_PUSH IKCP_LOG_IN_WASK IKCP_LOG_IN_WINS )
type Listener ¶
type Listener struct {
// contains filtered or unexported fields
}
Listener defines a server which will be waiting to accept incoming connections
func ListenWithOptions ¶
func ListenWithOptions(laddr string, block BlockCrypt, dataShards, parityShards int) (*Listener, error)
ListenWithOptions listens for incoming KCP packets addressed to the local address laddr on the network "udp" with packet encryption.
'block' is the block encryption algorithm to encrypt packets.
'dataShards', 'parityShards' specify how many parity packets will be generated following the data packets.
Check https://github.com/klauspost/reedsolomon for details
func ServeConn ¶
func ServeConn(block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*Listener, error)
ServeConn serves KCP protocol for a single packet connection.
func (*Listener) Accept ¶
Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn.
func (*Listener) AcceptKCP ¶
func (l *Listener) AcceptKCP() (*UDPSession, error)
AcceptKCP accepts a KCP connection
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) Control ¶ added in v5.6.15
func (l *Listener) Control(f func(conn net.PacketConn) error) error
Control applys a procedure to the underly socket fd. CAUTION: BE VERY CAREFUL TO USE THIS FUNCTION, YOU MAY BREAK THE PROTOCOL.
func (*Listener) SetDSCP ¶
SetDSCP sets the 6bit DSCP field in IPv4 header, or 8bit Traffic Class in IPv6 header.
if the underlying connection has implemented `func SetDSCP(int) error`, SetDSCP() will invoke this function instead.
func (*Listener) SetDeadline ¶
SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline.
func (*Listener) SetReadBuffer ¶
SetReadBuffer sets the socket read buffer for the Listener
func (*Listener) SetReadDeadline ¶
SetReadDeadline implements the Conn SetReadDeadline method.
func (*Listener) SetWriteBuffer ¶
SetWriteBuffer sets the socket write buffer for the Listener
type PacketType ¶ added in v5.6.40
type PacketType int8
const ( IKCP_PACKET_REGULAR PacketType = iota IKCP_PACKET_FEC )
type RingBuffer ¶ added in v5.6.22
type RingBuffer[T any] struct { // contains filtered or unexported fields }
RingBuffer is a generic ring (circular) buffer that supports dynamic resizing. It provides efficient FIFO queue behavior with amortized constant time operations.
func NewRingBuffer ¶ added in v5.6.22
func NewRingBuffer[T any](size int) *RingBuffer[T]
NewRingBuffer creates a new Ring with a specified initial capacity. If the provided size is <= 8, it defaults to 8.
func (*RingBuffer[T]) Clear ¶ added in v5.6.22
func (r *RingBuffer[T]) Clear()
Clear resets the ring to an empty state and reinitializes the buffer.
func (*RingBuffer[T]) Discard ¶ added in v5.6.22
func (r *RingBuffer[T]) Discard(n int) int
Discard discards the first N elements from the ring buffer. Returns the number of elements that are actually discarded (<= n).
func (*RingBuffer[T]) ForEach ¶ added in v5.6.22
func (r *RingBuffer[T]) ForEach(fn func(*T) bool)
ForEach iterates over each element in the ring buffer, applying the provided function. If the function returns false, iteration stops early.
func (*RingBuffer[T]) ForEachReverse ¶ added in v5.6.22
func (r *RingBuffer[T]) ForEachReverse(fn func(*T) bool)
ForEachReverse iterates over each element in the ring buffer in reverse order, applying the provided function. If the function returns false, iteration stops early.
func (*RingBuffer[T]) IsEmpty ¶ added in v5.6.22
func (r *RingBuffer[T]) IsEmpty() bool
IsEmpty returns true if the ring has no elements.
func (*RingBuffer[T]) IsFull ¶ added in v5.6.22
func (r *RingBuffer[T]) IsFull() bool
IsFull returns true if the ring buffer is full (tail + 1 == head).
func (*RingBuffer[T]) Len ¶ added in v5.6.22
func (r *RingBuffer[T]) Len() int
Len returns the number of elements currently in the ring.
func (*RingBuffer[T]) MaxLen ¶ added in v5.6.22
func (r *RingBuffer[T]) MaxLen() int
MaxLen returns the maximum capacity of the ring buffer.
func (*RingBuffer[T]) Peek ¶ added in v5.6.22
func (r *RingBuffer[T]) Peek() (*T, bool)
Peek returns the element at the head of the ring without removing it. It returns the zero value and false if the ring is empty.
func (*RingBuffer[T]) Pop ¶ added in v5.6.22
func (r *RingBuffer[T]) Pop() (T, bool)
Pop removes and returns the element from the head of the ring. It returns the zero value and false if the ring is empty.
func (*RingBuffer[T]) Push ¶ added in v5.6.22
func (r *RingBuffer[T]) Push(v T)
Push adds an element to the tail of the ring. If the ring is full, it will grow automatically.
type Snmp ¶
type Snmp struct {
BytesSent uint64 // bytes sent from upper level
BytesReceived uint64 // bytes received to upper level
MaxConn uint64 // max number of connections ever reached
ActiveOpens uint64 // accumulated active open connections
PassiveOpens uint64 // accumulated passive open connections
CurrEstab uint64 // current number of established connections
InErrs uint64 // UDP read errors reported from net.PacketConn
InCsumErrors uint64 // checksum errors from CRC32
KCPInErrors uint64 // packet iput errors reported from KCP
InPkts uint64 // incoming packets count
OutPkts uint64 // outgoing packets count
InSegs uint64 // incoming KCP segments
OutSegs uint64 // outgoing KCP segments
InBytes uint64 // UDP bytes received
OutBytes uint64 // UDP bytes sent
RetransSegs uint64 // accmulated retransmited segments
FastRetransSegs uint64 // accmulated fast retransmitted segments
EarlyRetransSegs uint64 // accmulated early retransmitted segments
LostSegs uint64 // number of segs inferred as lost
RepeatSegs uint64 // number of segs duplicated
FECFullShardSet uint64 // number of FEC segments that are full
FECRecovered uint64 // correct packets recovered from FEC
FECErrs uint64 // incorrect packets recovered from FEC
FECParityShards uint64 // FEC segments received
FECShardSet uint64 // number of parity shards that are not yet received
FECShardMin uint64 // the minimum ID of FEC shards
RingBufferSndQueue uint64 // Len of segments in send queue ring buffer
RingBufferRcvQueue uint64 // Len of segments in receive queue ring buffer
RingBufferSndBuffer uint64 // Len of segments in send buffer ring buffer
OOBPackets uint64 // number of OOB packets received
}
Snmp defines network statistics indicator
var DefaultSnmp *Snmp
DefaultSnmp is the global KCP connection statistics collector
type TimedSched ¶ added in v5.5.0
type TimedSched struct {
// contains filtered or unexported fields
}
TimedSched represents the control struct for timed parallel scheduler
var SystemTimedSched *TimedSched = NewTimedSched(runtime.NumCPU())
SystemTimedSched is the library level timed-scheduler
func NewTimedSched ¶ added in v5.5.0
func NewTimedSched(parallel int) *TimedSched
NewTimedSched creates a parallel-scheduler with given parallelization
func (*TimedSched) Close ¶ added in v5.5.0
func (ts *TimedSched) Close()
Close terminates this scheduler
func (*TimedSched) Put ¶ added in v5.5.0
func (ts *TimedSched) Put(f func(), deadline time.Time)
Put a function 'f' awaiting to be executed at 'deadline'
type UDPSession ¶
type UDPSession struct {
// contains filtered or unexported fields
}
UDPSession defines a KCP session implemented by UDP
func DialWithOptions ¶
func DialWithOptions(raddr string, block BlockCrypt, dataShards, parityShards int) (*UDPSession, error)
DialWithOptions connects to the remote address "raddr" on the network "udp" with packet encryption
'block' is the block encryption algorithm to encrypt packets.
'dataShards', 'parityShards' specify how many parity packets will be generated following the data packets.
Check https://github.com/klauspost/reedsolomon for details
func NewConn ¶
func NewConn(raddr string, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error)
NewConn establishes a session and talks KCP protocol over a packet connection.
func NewConn2 ¶
func NewConn2(raddr net.Addr, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error)
NewConn2 establishes a session and talks KCP protocol over a packet connection.
func NewConn3 ¶
func NewConn3(convid uint32, raddr net.Addr, block BlockCrypt, dataShards, parityShards int, conn net.PacketConn) (*UDPSession, error)
NewConn3 establishes a session and talks KCP protocol over a packet connection.
func NewConn4 ¶ added in v5.6.14
func NewConn4(convid uint32, raddr net.Addr, block BlockCrypt, dataShards, parityShards int, ownConn bool, conn net.PacketConn) (*UDPSession, error)
NewConn4 establishes a session and talks KCP protocol over a packet connection.
func (*UDPSession) Control ¶ added in v5.6.15
func (s *UDPSession) Control(f func(conn net.PacketConn) error) error
Control applys a procedure to the underly socket fd. CAUTION: BE VERY CAREFUL TO USE THIS FUNCTION, YOU MAY BREAK THE PROTOCOL.
func (*UDPSession) GetConv ¶
func (s *UDPSession) GetConv() uint32
GetConv gets conversation id of a session
func (*UDPSession) GetOOBMaxSize ¶ added in v5.6.60
func (s *UDPSession) GetOOBMaxSize() int
GetOOBMaxSize returns the maximum payload size for an OOB packet.
The returned value is the maximum number of bytes that can be carried as OOB data in a single packet, based on the current MTU and protocol layout.
If FEC is not enabled, OOB is unsupported and this function returns 0.
func (*UDPSession) GetRTO ¶ added in v5.5.13
func (s *UDPSession) GetRTO() uint32
GetRTO gets current rto of the session
func (*UDPSession) GetSRTT ¶ added in v5.5.15
func (s *UDPSession) GetSRTT() int32
GetSRTT gets current srtt of the session
func (*UDPSession) GetSRTTVar ¶ added in v5.5.15
func (s *UDPSession) GetSRTTVar() int32
GetRTTVar gets current rtt variance of the session
func (*UDPSession) LocalAddr ¶
func (s *UDPSession) 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 (*UDPSession) Read ¶
func (s *UDPSession) Read(b []byte) (n int, err error)
Read implements net.Conn
func (*UDPSession) RemoteAddr ¶
func (s *UDPSession) 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 (*UDPSession) SendOOB ¶ added in v5.6.60
func (s *UDPSession) SendOOB(data []byte) error
SendOOB sends an out-of-band (OOB) data packet.
OOB packets:
- Are unreliable: they are NOT retransmitted if lost.
- Are unordered: delivery order is not guaranteed.
- Are unacknowledged: no ACKs are generated.
- Bypass the KCP reliable data path.
- Reuse the FEC header layout for demultiplexing, but are NOT protected by FEC.
The OOB payload MUST fit into a single packet. If the payload is too large, an error is returned.
If the internal send queue is full, the OOB packet is dropped silently.
func (*UDPSession) SetACKNoDelay ¶
func (s *UDPSession) SetACKNoDelay(nodelay bool)
SetACKNoDelay changes ack flush option, set true to flush ack immediately,
func (*UDPSession) SetDSCP ¶
func (s *UDPSession) SetDSCP(dscp int) error
SetDSCP sets the 6bit DSCP field in IPv4 header, or 8bit Traffic Class in IPv6 header.
if the underlying connection has implemented `func SetDSCP(int) error`, SetDSCP() will invoke this function instead.
It has no effect if it's accepted from Listener.
func (*UDPSession) SetDUP ¶
func (s *UDPSession) SetDUP(dup int)
(deprecated)
SetDUP duplicates udp packets for kcp output.
func (*UDPSession) SetDeadline ¶
func (s *UDPSession) SetDeadline(t time.Time) error
SetDeadline sets the deadline associated with the listener. A zero time value disables the deadline.
func (*UDPSession) SetLogger ¶ added in v5.6.39
func (s *UDPSession) SetLogger(mask KCPLogType, logger logoutput_callback)
SetLogger configures the kcp trace logger
func (*UDPSession) SetMtu ¶
func (s *UDPSession) SetMtu(mtu int) bool
SetMtu sets the maximum transmission unit(not including UDP header)
func (*UDPSession) SetNoDelay ¶
func (s *UDPSession) SetNoDelay(nodelay, interval, resend, nc int)
SetNoDelay calls nodelay() of kcp https://github.com/skywind3000/kcp/blob/master/README.en.md#protocol-configuration
func (*UDPSession) SetOOBHandler ¶ added in v5.6.60
func (s *UDPSession) SetOOBHandler(callback OOBCallBackType) error
SetOOBHandler registers a callback for receiving out-of-band (OOB) data.
OOB data is delivered unreliably and bypasses the KCP reliable data path. The callback is invoked synchronously from the KCP input processing path.
The callback MUST return quickly and MUST NOT perform any blocking operations. Blocking inside the callback will stall processing of all other KCP packets.
Passing a nil callback unregisters the current OOB callback.
OOB support requires FEC to be enabled, as the OOB packet format reuses the FEC header layout for demultiplexing.
func (*UDPSession) SetRateLimit ¶ added in v5.6.35
func (s *UDPSession) SetRateLimit(bytesPerSecond uint32)
SetRateLimit sets the rate limit for this session in bytes per second, by setting to 0 will disable rate limiting.
func (*UDPSession) SetReadBuffer ¶
func (s *UDPSession) SetReadBuffer(bytes int) error
SetReadBuffer sets the socket read buffer, no effect if it's accepted from Listener
func (*UDPSession) SetReadDeadline ¶
func (s *UDPSession) SetReadDeadline(t time.Time) error
SetReadDeadline implements the Conn SetReadDeadline method.
func (*UDPSession) SetStreamMode
deprecated
func (s *UDPSession) SetStreamMode(enable bool)
Deprecated: toggles the stream mode on/off
func (*UDPSession) SetWindowSize ¶
func (s *UDPSession) SetWindowSize(sndwnd, rcvwnd int)
SetWindowSize set maximum window size
func (*UDPSession) SetWriteBuffer ¶
func (s *UDPSession) SetWriteBuffer(bytes int) error
SetWriteBuffer sets the socket write buffer, no effect if it's accepted from Listener
func (*UDPSession) SetWriteDeadline ¶
func (s *UDPSession) SetWriteDeadline(t time.Time) error
SetWriteDeadline implements the Conn SetWriteDeadline method.
func (*UDPSession) SetWriteDelay ¶
func (s *UDPSession) SetWriteDelay(delay bool)
SetWriteDelay delays write for bulk transfer until the next update interval
func (*UDPSession) Write ¶
func (s *UDPSession) Write(b []byte) (n int, err error)
Write implements net.Conn
func (*UDPSession) WriteBuffers ¶
func (s *UDPSession) WriteBuffers(v [][]byte) (n int, err error)
WriteBuffers write a vector of byte slices to the underlying connection
