Per-packet source tracking in transport, via/from in info output

This commit is contained in:
Ian Gulliver
2026-04-07 22:30:26 +09:00
parent f96ed20aa0
commit 3d20bf4c33
4 changed files with 41 additions and 37 deletions

View File

@@ -1,9 +1,7 @@
package client
import (
"bytes"
"fmt"
"io"
"net"
"syscall"
"time"
@@ -17,7 +15,6 @@ type udpTransport struct {
conn *net.UDPConn
addr *net.UDPAddr
broadcast bool
buf bytes.Buffer
}
func interfaceIPv4Net(name string) (net.IP, *net.IPNet, error) {
@@ -117,21 +114,13 @@ func (t *udpTransport) SetReadTimeout(timeout time.Duration) {
t.conn.SetReadDeadline(time.Now().Add(timeout))
}
func (t *udpTransport) Reader() io.Reader {
return t
}
func (t *udpTransport) Read(p []byte) (int, error) {
if t.buf.Len() > 0 {
return t.buf.Read(p)
}
pkt := make([]byte, 1500)
n, err := t.conn.Read(pkt)
func (t *udpTransport) Recv() ([]byte, string, error) {
buf := make([]byte, 1500)
n, addr, err := t.conn.ReadFromUDP(buf)
if err != nil {
return 0, err
return nil, "", err
}
t.buf.Write(pkt[:n])
return t.buf.Read(p)
return buf[:n], addr.IP.String(), nil
}
func (t *udpTransport) Broadcast() bool { return t.broadcast }