conn

package
v0.0.0-...-52f54c4 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 2024 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	UdpBufLen = 1472 //UDP发送、接收,kcp发送、接收缓冲的大小

)

IP协议规定路由器最少能转发:512数据+60IP首部最大+4预留=576字节,即最少可以转发512-8=504字节UDP数据 内网一般1500字节,UDP:1500-IP(20)-UDP(8)=1472字节数据

Variables

View Source
var (
	ErrDecoderClosed = zstd.ErrDecoderClosed
	ErrUnexpectedEOF = io.ErrUnexpectedEOF
)
View Source
var (
	ErrBufferTooSmall = errors.NewCode(0, 10001, "buffer is too small")
)

Functions

func KcpOutoput

func KcpOutoput(ctx context.Context, ln *net.UDPConn, addr *net.UDPAddr) (f func([]byte, int))

kcp send()之后,会在flush()的时候调用这里的函数,将数据包通过udp 发送出去

func KcpOutoputByConn

func KcpOutoputByConn(ctx context.Context, conn net.Conn) (f func([]byte, int))

func KcpUpdata

func KcpUpdata(ctx context.Context, conf KcpConfig)

func SetReadWriteBuff

func SetReadWriteBuff(ctx context.Context, rwc io.ReadWriteCloser, read, write int) (err error)

SetReadWriteBuff 设置 conn 读写缓存的大小

func UpdataAdd

func UpdataAdd(c *Conn)

func UpdataDel

func UpdataDel(c *Conn)

Types

type Conn

type Conn struct {
	Addr *net.UDPAddr //只在创建的时候写入,其他时候只读,所以不加锁读

	KCP *kcp.KCP //kcp线程不安全,所以必须加锁

	RefleshTime int64 //每次收到数据包,就更新这个时间,在kcp_updata()的时候检查这个时间,超时则删除
	M           int   // KCP 是否又可接收的完整数据

	*sync.Mutex //kcp操作锁,因为有可能并发创建kcp,所以必须在Conn创建之初创建锁
	// contains filtered or unexported fields
}

Conn 每条连接建立一个Conn

func Addr2Conn

func Addr2Conn(addr *net.UDPAddr) (conn *Conn, isFirstTime bool)

通过*net.UDPAddr查找或生成一个*Conn,保证返回可用结果

func ConnID2Conn

func ConnID2Conn(connID uint64) (conn *Conn)

通过*net.UDPAddr查找*Conn,找不到则返回nil

func (Conn) Close

func (c Conn) Close() error

func (Conn) Read

func (c Conn) Read(p []byte) (n int, err error)

func (Conn) Write

func (c Conn) Write(p []byte) (n int, err error)

type KcpCli

type KcpCli struct {
	net.Conn
	ID          int
	KCP         *kcp.KCP //kcp线程不安全,所以必须加锁
	RefleshTime int64    //每次收到数据包,就更新这个时间,在kcp_updata()的时候检查这个时间,超时则删除
	M           int      // KCP 是否又可接收的完整数据

	*sync.Mutex //kcp操作锁,因为有可能并发创建kcp,所以必须在Conn创建之初创建锁
	// contains filtered or unexported fields
}

KcpCli 每条连接建立一个Conn

func NewKcpCli

func NewKcpCli(ctx context.Context, conv uint32, conn net.Conn) (c *KcpCli)

func (KcpCli) Close

func (c KcpCli) Close() error

func (KcpCli) Read

func (c KcpCli) Read(p []byte) (n int, err error)

func (KcpCli) Write

func (c KcpCli) Write(p []byte) (n int, err error)

type KcpConfig

type KcpConfig struct {
	KcpUpdataTime int64
	MaxIdleTime   int64
}

type QuicConn

type QuicConn struct {
	quic.Connection
	quic.Stream
}

func WrapQuic

func WrapQuic(ctx context.Context, c quic.Connection) (qc *QuicConn, err error)

func WrapQuicClient

func WrapQuicClient(ctx context.Context, c quic.Connection) (qc *QuicConn, err error)

type UdpConn

type UdpConn struct {
	Addr *net.UDPAddr //只在创建的时候写入,其他时候只读,所以不加锁读

	ChRead     chan []byte
	sync.Mutex            //kcp操作锁,因为有可能并发创建kcp,所以必须在Conn创建之初创建锁
	W          sync.Mutex //kcp操作锁,因为有可能并发创建kcp,所以必须在Conn创建之初创建锁
	// contains filtered or unexported fields
}

UdpConn 每条连接建立一个Conn

func ToUdpConn

func ToUdpConn(ctx context.Context, addr *net.UDPAddr, ln *net.UDPConn) (c *UdpConn, isFirstTime bool)

func (*UdpConn) Close

func (c *UdpConn) Close() error

func (*UdpConn) Read

func (c *UdpConn) Read(p []byte) (n int, err error)

func (*UdpConn) Write

func (c *UdpConn) Write(p []byte) (n int, err error)

type UdpConnCli

type UdpConnCli struct {
	Conn net.Conn

	sync.Mutex            //kcp操作锁,因为有可能并发创建kcp,所以必须在Conn创建之初创建锁
	W          sync.Mutex //kcp操作锁,因为有可能并发创建kcp,所以必须在Conn创建之初创建锁
	// contains filtered or unexported fields
}

UdpConn 每条连接建立一个Conn

func (*UdpConnCli) Close

func (c *UdpConnCli) Close() error

func (*UdpConnCli) Read

func (c *UdpConnCli) Read(p []byte) (n int, err error)

func (*UdpConnCli) Write

func (c *UdpConnCli) Write(p []byte) (n int, err error)

type Zip

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

func NewZip

func NewZip(ctx context.Context, rwc io.ReadWriteCloser) (c *Zip, err error)

func (*Zip) Close

func (c *Zip) Close() (err error)

func (*Zip) Read

func (c *Zip) Read(data []byte) (n int, err error)

func (*Zip) Write

func (c *Zip) Write(data []byte) (n int, err error)

func (*Zip) WriteMul

func (c *Zip) WriteMul(datas [][]byte) (n int, err error)

Jump to

Keyboard shortcuts

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