Projects STRLCPY tun2socks Commits 66860d3d
🤬
  • ■ ■ ■ ■ ■ ■
    tunnel/tcp.go
    skipped 46 lines
    47 47   defer targetConn.Close()
    48 48   
    49 49   log.Infof("[TCP] %s <-> %s", metadata.SourceAddress(), metadata.DestinationAddress())
    50  - relay(localConn, targetConn) /* relay connections */
     50 + if err = relay(localConn, targetConn); err != nil {
     51 + log.Warnf("[TCP] %s <-> %s: %v", metadata.SourceAddress(), metadata.DestinationAddress(), err)
     52 + }
    51 53  }
    52 54   
    53 55  // relay copies between left and right bidirectionally.
    54  -func relay(left, right net.Conn) {
     56 +func relay(left, right net.Conn) error {
    55 57   wg := sync.WaitGroup{}
    56 58   wg.Add(2)
    57 59   
     60 + var leftErr, rightErr error
     61 + 
    58 62   go func() {
    59 63   defer wg.Done()
    60 64   if err := copyBuffer(right, left); err != nil {
    61  - log.Warnf("[TCP] %v", err)
     65 + leftErr = errors.Join(leftErr, err)
    62 66   }
    63 67   right.SetReadDeadline(time.Now().Add(tcpWaitTimeout))
    64 68   }()
    skipped 1 lines
    66 70   go func() {
    67 71   defer wg.Done()
    68 72   if err := copyBuffer(left, right); err != nil {
    69  - log.Warnf("[TCP] %v", err)
     73 + rightErr = errors.Join(rightErr, err)
    70 74   }
    71 75   left.SetReadDeadline(time.Now().Add(tcpWaitTimeout))
    72 76   }()
    73 77   
    74 78   wg.Wait()
     79 + return errors.Join(leftErr, rightErr)
    75 80  }
    76 81   
    77 82  func copyBuffer(dst io.Writer, src io.Reader) error {
    skipped 21 lines
  • ■ ■ ■ ■ ■ ■
    tunnel/udp.go
    1 1  package tunnel
    2 2   
    3 3  import (
     4 + "errors"
    4 5   "io"
    5 6   "net"
    6 7   "sync"
    skipped 50 lines
    57 58   pc = newSymmetricNATPacketConn(pc, metadata)
    58 59   
    59 60   log.Infof("[UDP] %s <-> %s", metadata.SourceAddress(), metadata.DestinationAddress())
    60  - relayPacket(uc, pc, remote)
     61 + if err = relayPacket(uc, pc, remote); err != nil {
     62 + log.Warnf("[TCP] %s <-> %s: %v", metadata.SourceAddress(), metadata.DestinationAddress(), err)
     63 + }
    61 64  }
    62 65   
    63  -func relayPacket(left net.PacketConn, right net.PacketConn, to net.Addr) {
     66 +func relayPacket(left net.PacketConn, right net.PacketConn, to net.Addr) error {
    64 67   wg := sync.WaitGroup{}
    65 68   wg.Add(2)
    66 69   
     70 + var leftErr, rightErr error
     71 + 
    67 72   go func() {
    68 73   defer wg.Done()
    69 74   if err := copyPacketBuffer(right, left, to, _udpSessionTimeout); err != nil {
    70  - log.Warnf("[UDP] %v", err)
     75 + leftErr = errors.Join(leftErr, err)
    71 76   }
    72 77   }()
    73 78   
    74 79   go func() {
    75 80   defer wg.Done()
    76 81   if err := copyPacketBuffer(left, right, nil, _udpSessionTimeout); err != nil {
    77  - log.Warnf("[UDP] %v", err)
     82 + rightErr = errors.Join(rightErr, err)
    78 83   }
    79 84   }()
    80 85   
    81 86   wg.Wait()
     87 + return errors.Join(leftErr, rightErr)
    82 88  }
    83 89   
    84 90  func copyPacketBuffer(dst net.PacketConn, src net.PacketConn, to net.Addr, timeout time.Duration) error {
    skipped 48 lines
Please wait...
Page is in error, reload to recover