mirror of https://github.com/ginuerzh/gost
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
641 B
39 lines
641 B
package quic
|
|
|
|
import (
|
|
"net"
|
|
"sync"
|
|
)
|
|
|
|
type connection interface {
|
|
write([]byte) error
|
|
setCurrentRemoteAddr(interface{})
|
|
RemoteAddr() *net.UDPAddr
|
|
}
|
|
|
|
type udpConn struct {
|
|
mutex sync.RWMutex
|
|
|
|
conn *net.UDPConn
|
|
currentAddr *net.UDPAddr
|
|
}
|
|
|
|
var _ connection = &udpConn{}
|
|
|
|
func (c *udpConn) write(p []byte) error {
|
|
_, err := c.conn.WriteToUDP(p, c.currentAddr)
|
|
return err
|
|
}
|
|
|
|
func (c *udpConn) setCurrentRemoteAddr(addr interface{}) {
|
|
c.mutex.Lock()
|
|
c.currentAddr = addr.(*net.UDPAddr)
|
|
c.mutex.Unlock()
|
|
}
|
|
|
|
func (c *udpConn) RemoteAddr() *net.UDPAddr {
|
|
c.mutex.RLock()
|
|
addr := c.currentAddr
|
|
c.mutex.RUnlock()
|
|
return addr
|
|
}
|
|
|