| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | package networkimport (	"errors"	"io"	"sync"	"time")const (	NetTCP = "tcp"	NetUDP = "udp")const (	DefaultDialTimout = 10 * time.Second	// DefaultReadTimout 默认读取超时时间	DefaultReadTimout          = 5 * time.Second	DefaultWriteTimout         = 3 * time.Second	DefaultRWTimout            = DefaultReadTimout + DefaultWriteTimout	DefaultModbusWriteInterval = 1 * time.Second)var (	// ErrClosed 表示连接已关闭, 此连接不可再重用	ErrClosed = errors.New("network: connection was closed")	// ErrTimout 用于特定情况下的超时	ErrTimout = errors.New("network: timout")	// ErrReconnect 表示连接已经关闭且正在重连中. 遇到此错误时应重试读取或写入直至成功	// 此错误仅在 "SetReconnect" 为 true 时开启, 仅适用于 Client 及派生接口	ErrReconnect = errors.New("network: reconnecting")	// ErrNotFullyWrite 表示需要写入的数据大小与已写入的数据大小不一致	ErrNotFullyWrite = errors.New("network: not fully write bytes to socket")	// ErrConnNotFound 连接不存在	ErrConnNotFound = errors.New("network: connection not found"))func IsClosed(err error) bool {	return err == ErrClosed}func IsReconnect(err error) bool {	return err == ErrReconnect}var (	// defaultPool 分配指定数量大小的 byte 数组	defaultPool = sync.Pool{New: func() any {		return make([]byte, 4096)	}})// Client 用于 TCP(非TLS)/UDP 的统一操作接口, 可通过 Dial 实现此接口type Client interface {	io.ReadWriteCloser	Timout	SetReconnect(r bool) // 仅用于 TCP}// ModbusClient 每 1 秒调用 ModbusCreator 创建需要写入的数据并发送至服务器, 然后将服务器返回的数据保存在内部.// Get 即获取服务器返回的数据, 当 Get 返回非 ErrReconnect 的错误时, 应调用 Close 关闭type ModbusClient interface {	Get() ([]byte, error)	Write(p []byte) error	io.Closer}// ModbusCreator 创建需要写入的数据type ModbusCreator interface {	Create() ([]byte, error)}type Timout interface {	SetReadDeadline(timout time.Duration)	SetWriteDeadline(timout time.Duration)	SetDeadline(timout time.Duration)}type Logger interface {}
 |