Fix HandshakeFailure usages

This commit is contained in:
世界 2024-11-14 19:45:41 +08:00
parent 7f621fdd78
commit 3e7ac7475e
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
2 changed files with 10 additions and 3 deletions

View file

@ -36,7 +36,13 @@ func ReportHandshakeFailure(reporter any, err error) error {
func CloseOnHandshakeFailure(reporter any, onClose CloseHandlerFunc, err error) error {
if err != nil {
if handshakeConn, isHandshakeConn := common.Cast[HandshakeFailure](reporter); isHandshakeConn {
err = E.Append(err, handshakeConn.HandshakeFailure(err), func(err error) error {
hErr := handshakeConn.HandshakeFailure(err)
err = E.Append(err, hErr, func(err error) error {
if closer, isCloser := reporter.(io.Closer); isCloser {
err = E.Append(err, closer.Close(), func(err error) error {
return E.Cause(err, "close")
})
}
return E.Cause(err, "write handshake failure")
})
} else {

View file

@ -2,6 +2,7 @@ package socks
import (
"net"
"os"
"github.com/sagernet/sing/common/buf"
"github.com/sagernet/sing/common/bufio"
@ -48,7 +49,7 @@ func (c *LazyConn) ConnHandshakeSuccess(conn net.Conn) error {
func (c *LazyConn) HandshakeFailure(err error) error {
if c.responseWritten {
return nil
return os.ErrInvalid
}
defer func() {
c.responseWritten = true
@ -130,7 +131,7 @@ func (c *LazyAssociatePacketConn) HandshakeSuccess() error {
func (c *LazyAssociatePacketConn) HandshakeFailure(err error) error {
if c.responseWritten {
return nil
return os.ErrInvalid
}
defer func() {
c.responseWritten = true