55 "fmt"
66 "io"
77 "net"
8+ "os"
89 "sync"
910 "time"
1011
@@ -44,7 +45,8 @@ func (transport *Transport) HandleClient(config tcp.ClientConfig, target abstrac
4445 for {
4546 conn , err := config .Dial (network , remote )
4647 if err != nil {
47- if ! errors .Is (err , error (tcp.ErrTooManyRetries {})) {
48+ if config .AbortOnError {
49+ fmt .Fprintf (os .Stderr , "Error connecting to %s: %v\n " , target , err )
4850 return err
4951 }
5052
@@ -55,6 +57,14 @@ func (transport *Transport) HandleClient(config tcp.ClientConfig, target abstrac
5557 if errors .Is (err , error (ErrTargetAlreadyConnected {})) {
5658 return err
5759 }
60+ if err != nil {
61+ if config .AbortOnError {
62+ fmt .Fprintf (os .Stderr , "Error handling connection to %s: %v\n " , target , err )
63+ return err
64+ }
65+
66+ continue
67+ }
5868
5969 // Wait before trying to reconnect
6070 config .CurrentRetries = 5
@@ -83,6 +93,12 @@ func (transport *Transport) handleTCPConn(target abstraction.TransportTarget, co
8393 return err
8494 }
8595
96+ if tcpConn , ok := conn .(* net.TCPConn ); ok {
97+ err := tcpConn .SetLinger (0 )
98+ if err != nil {
99+ fmt .Fprintf (os .Stderr , "Error setting %s linger to zero: %v\n " , target , err )
100+ }
101+ }
86102 conn , errChan := tcp .WithErrChan (conn )
87103 defer conn .Close ()
88104
0 commit comments