优化连接处理逻辑,增加超时设置;重构命令读取与错误处理;新增公共工具函数以简化错误处理
This commit is contained in:
41
utils/conn.go
Normal file
41
utils/conn.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log/slog"
|
||||
"net"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func WarpConnErr(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var opErr *net.OpError
|
||||
switch {
|
||||
|
||||
case errors.Is(err, net.ErrClosed):
|
||||
slog.Debug("连接已关闭")
|
||||
return nil
|
||||
|
||||
case errors.Is(err, io.EOF):
|
||||
slog.Debug("连接被对端关闭")
|
||||
return nil
|
||||
|
||||
case errors.As(err, &opErr):
|
||||
switch {
|
||||
case
|
||||
errors.Is(opErr.Err, syscall.WSAECONNRESET), errors.Is(opErr.Err, syscall.WSAECONNABORTED),
|
||||
errors.Is(opErr.Err, syscall.ECONNRESET), errors.Is(opErr.Err, syscall.ECONNABORTED):
|
||||
slog.Debug("连接被对端重置")
|
||||
return nil
|
||||
case opErr.Timeout():
|
||||
slog.Debug("连接已超时")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("连接发生未处理的错误: %w", err)
|
||||
}
|
||||
Reference in New Issue
Block a user