Skip to content

Commit 4d2ed74

Browse files
tcp: don't create endpoint before Dial() returns (#149)
1 parent bdddbbe commit 4d2ed74

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

intra/tcp.go

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

189-
// handshake; since we assume a duplex-stream from here on
190-
if open, err = gconn.Establish(); !open {
191-
log.E("tcp: %s connect err %v; %s => %s for %s", cid, err, src, target, uid)
192-
clos(gconn)
193-
h.queueSummary(smm.done(err))
194-
return deny // == !open
195-
}
196-
197189
if isAnyBasePid(pids) { // see udp.go:Connect
198-
if h.dnsOverride(gconn, target, uid) {
190+
if target.IsValid() && h.resolver.IsDnsAddr(target) {
199191
// 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+
})
200201
return allow
201202
} // else not a dns request
202203
} // if ipn.Exit then let it connect as-is (aka exit)
@@ -288,6 +289,12 @@ func (h *tcpHandler) handle(px ipn.Proxy, src net.Conn, boundSrc, target netip.A
288289
return err
289290
}
290291

292+
gconn := src.(*netstack.GTCPConn)
293+
if _, err := gconn.Establish(); err != nil {
294+
clos(pc)
295+
return err
296+
}
297+
291298
core.Go("tcp.forward."+smm.ID, func() {
292299
h.listener.PostFlow(smm.postMark())
293300
h.forward(src, rwext{dst, tcptimeout}, smm) // src always *gonet.TCPConn

0 commit comments

Comments
 (0)