| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package quic
- import (
- "net"
- "sync"
- )
- type connection interface {
- Write([]byte) error
- Read([]byte) (int, net.Addr, error)
- Close() error
- LocalAddr() net.Addr
- RemoteAddr() net.Addr
- SetCurrentRemoteAddr(net.Addr)
- }
- type conn struct {
- mutex sync.RWMutex
- pconn net.PacketConn
- currentAddr net.Addr
- }
- var _ connection = &conn{}
- func (c *conn) Write(p []byte) error {
- _, err := c.pconn.WriteTo(p, c.currentAddr)
- return err
- }
- func (c *conn) Read(p []byte) (int, net.Addr, error) {
- return c.pconn.ReadFrom(p)
- }
- func (c *conn) SetCurrentRemoteAddr(addr net.Addr) {
- c.mutex.Lock()
- c.currentAddr = addr
- c.mutex.Unlock()
- }
- func (c *conn) LocalAddr() net.Addr {
- return c.pconn.LocalAddr()
- }
- func (c *conn) RemoteAddr() net.Addr {
- c.mutex.RLock()
- addr := c.currentAddr
- c.mutex.RUnlock()
- return addr
- }
- func (c *conn) Close() error {
- return c.pconn.Close()
- }
|