...
1
2
3
4
5
6
7 package quic
8
9 import (
10 "net"
11 "net/netip"
12 )
13
14
15
16
17
18
19
20
21 const (
22 udpECNSupport = false
23 udpInvalidLocalAddrIsError = false
24 )
25
26 type netUDPConn struct {
27 c *net.UDPConn
28 }
29
30 func newNetUDPConn(uc *net.UDPConn) (*netUDPConn, error) {
31 return &netUDPConn{
32 c: uc,
33 }, nil
34 }
35
36 func (c *netUDPConn) Close() error { return c.c.Close() }
37
38 func (c *netUDPConn) LocalAddr() netip.AddrPort {
39 a, _ := c.c.LocalAddr().(*net.UDPAddr)
40 return a.AddrPort()
41 }
42
43 func (c *netUDPConn) Read(f func(*datagram)) {
44 for {
45 dgram := newDatagram()
46 n, _, _, peerAddr, err := c.c.ReadMsgUDPAddrPort(dgram.b, nil)
47 if err != nil {
48 return
49 }
50 if n == 0 {
51 continue
52 }
53 dgram.peerAddr = unmapAddrPort(peerAddr)
54 dgram.b = dgram.b[:n]
55 f(dgram)
56 }
57 }
58
59 func (c *netUDPConn) Write(dgram datagram) error {
60 _, err := c.c.WriteToUDPAddrPort(dgram.b, dgram.peerAddr)
61 return err
62 }
63
View as plain text