mirror of
https://github.com/cmz0228/hysteria-dev.git
synced 2025-06-25 05:50:05 +00:00
chore: minor code adjustments
This commit is contained in:
parent
a4da230517
commit
f0f900c2dc
@ -112,25 +112,30 @@ func (c *ObfsUDPHopClientPacketConn) hopRoutine() {
|
|||||||
func (c *ObfsUDPHopClientPacketConn) hop() {
|
func (c *ObfsUDPHopClientPacketConn) hop() {
|
||||||
c.connMutex.Lock()
|
c.connMutex.Lock()
|
||||||
defer c.connMutex.Unlock()
|
defer c.connMutex.Unlock()
|
||||||
|
newConn, err := net.ListenUDP("udp", nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("udphop: failed to listen on %s: %v", newConn.LocalAddr(), err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Close prevConn,
|
||||||
|
// prevConn <- currentConn
|
||||||
|
// currentConn <- newConn
|
||||||
|
// update addrIndex
|
||||||
|
//
|
||||||
|
// We need to keep receiving packets from the previous connection,
|
||||||
|
// because otherwise there will be packet loss due to the time gap
|
||||||
|
// between we hop to a new port and the server acknowledges this change.
|
||||||
if c.prevConn != nil {
|
if c.prevConn != nil {
|
||||||
_ = c.prevConn.Close() // recvRoutine will exit on error
|
_ = c.prevConn.Close() // recvRoutine will exit on error
|
||||||
}
|
}
|
||||||
// We need to keep receiving packets from the previous connection,
|
|
||||||
// or there will be packet loss because there might be packets
|
|
||||||
// still in flight sent to the old port.
|
|
||||||
c.prevConn = c.currentConn
|
c.prevConn = c.currentConn
|
||||||
c.addrIndex = rand.Intn(len(c.serverAddrs))
|
|
||||||
conn, err := net.ListenUDP("udp", nil)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("udphop: failed to listen on %s: %v", conn.LocalAddr(), err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if c.obfs != nil {
|
if c.obfs != nil {
|
||||||
c.currentConn = udp.NewObfsUDPConn(conn, c.obfs)
|
c.currentConn = udp.NewObfsUDPConn(newConn, c.obfs)
|
||||||
} else {
|
} else {
|
||||||
c.currentConn = conn
|
c.currentConn = newConn
|
||||||
}
|
}
|
||||||
go c.recvRoutine(c.currentConn)
|
go c.recvRoutine(c.currentConn)
|
||||||
|
c.addrIndex = rand.Intn(len(c.serverAddrs))
|
||||||
log.Printf("udphop: hopping to %s", c.serverAddrs[c.addrIndex])
|
log.Printf("udphop: hopping to %s", c.serverAddrs[c.addrIndex])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user