Skip to content

Commit b52fdba

Browse files
committed
tcp: close netstack.GTCPConn where approp
1 parent cfa3a3d commit b52fdba

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

intra/tcp.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -187,17 +187,16 @@ func (h *tcpHandler) Proxy(gconn *netstack.GTCPConn, src, target netip.AddrPort)
187187
}
188188

189189
if isAnyBasePid(pids) { // see udp.go:Connect
190-
if target.IsValid() && h.resolver.IsDnsAddr(target) {
190+
// handshake; since we assume a duplex-stream from here on
191+
if _, err := gconn.Establish(); err != nil {
192+
log.E("tcp: %s connect1 err %v; %s => %s for %s", cid, err, src, target, uid)
193+
clos(gconn)
194+
h.queueSummary(smm.done(err))
195+
return deny // == !open
196+
}
197+
if h.dnsOverride(gconn, target, uid) {
191198
// SocketSummary not sent; x.DNSSummary supercedes it
192-
if _, err := gconn.Establish(); err != nil {
193-
clos(gconn)
194-
h.queueSummary(smm.done(err))
195-
return deny // == !open
196-
}
197-
// conn closed by the resolver
198-
core.Gx(h.proto+".dns", func() {
199-
h.resolver.Serve(h.proto, gconn, uid)
200-
})
199+
// conn closed by resolver
201200
return allow
202201
} // else not a dns request
203202
} // if ipn.Exit then let it connect as-is (aka exit)
@@ -240,7 +239,7 @@ func (h *tcpHandler) Proxy(gconn *netstack.GTCPConn, src, target netip.AddrPort)
240239
}
241240

242241
// handle connects to the target via the proxy, and pipes data between the src, target; thread-safe.
243-
func (h *tcpHandler) handle(px ipn.Proxy, src net.Conn, boundSrc, target netip.AddrPort, smm *SocketSummary) (err error) {
242+
func (h *tcpHandler) handle(px ipn.Proxy, src *netstack.GTCPConn, boundSrc, target netip.AddrPort, smm *SocketSummary) (err error) {
244243
var pc protect.Conn
245244
var dst net.Conn
246245

@@ -283,15 +282,16 @@ func (h *tcpHandler) handle(px ipn.Proxy, src net.Conn, boundSrc, target netip.A
283282
smm.RPID = ipn.ViaID(px)
284283

285284
if err != nil {
286-
clos(pc)
285+
clos(src, pc)
287286
log.W("tcp: err dialing %s proxy(%s) to dst(%v) for %s: %v",
288287
smm.ID, px.ID(), target, smm.UID, err)
289288
return err
290289
}
291290

292-
gconn := src.(*netstack.GTCPConn)
293-
if _, err := gconn.Establish(); err != nil {
294-
clos(pc)
291+
if _, err := src.Establish(); err != nil {
292+
log.E("tcp: %s connect2 err %v; %s => %s for %s",
293+
smm.ID, err, src.LocalAddr(), target, smm.UID)
294+
clos(src, pc)
295295
return err
296296
}
297297

0 commit comments

Comments
 (0)