1 回答

TA貢獻1831條經驗 獲得超9個贊
當你這樣做
go func() {
for {
donorConn, err := listenerDonors.AcceptTCP()
donorConn.SetKeepAlive(true)
if err != nil {
utils.StacktraceErrorAndExit(err)
return
}
log.Println("New donor connection from", Conn(donorConn))
donorConns <- donorConn
}
}()
您開始處理第一個 TCP 連接。此代碼塊在donorConns <- donorConn. 在此發送到通道完成之前,循環不會進入第二次迭代(并且不會接受下一個 TCP 連接)。
你做了一個非常相似的第二個循環
// Handle recipient connections
for {
recipientConn, err := listenerRecipients.AcceptTCP()
recipientConn.SetKeepAlive(true)
if err != nil {
utils.StacktraceErrorAndExit(err)
return
}
log.Println("New recipient connection from", Conn(recipientConn))
donorConn := <-donorConns
proxy.ProxifyConns(recipientConn, donorConn)
}
這需要donorConn := <-donorConns完成(從第一個循環開始)并且需要proxy.ProxifyConns(recipientConn, donorConn)完成。
我不確定你打算如何讓整個工作,但是,很可能,你需要一個很小的改變:
go proxy.ProxifyConns(recipientConn, donorConn)
- 1 回答
- 0 關注
- 165 瀏覽
添加回答
舉報