| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package udp
- import (
- "github.com/v2fly/v2ray-core/v5/common/buf"
- "github.com/v2fly/v2ray-core/v5/common/net"
- "github.com/v2fly/v2ray-core/v5/transport/internet"
- )
- func NewMonoDestUDPConn(conn internet.AbstractPacketConn, addr net.Addr) *MonoDestUDPConn {
- return &MonoDestUDPConn{
- AbstractPacketConn: conn,
- dest: addr,
- }
- }
- type MonoDestUDPConn struct {
- internet.AbstractPacketConn
- dest net.Addr
- }
- func (m *MonoDestUDPConn) ReadMultiBuffer() (buf.MultiBuffer, error) {
- buffer := buf.New()
- buffer.Extend(2048)
- nBytes, _, err := m.AbstractPacketConn.ReadFrom(buffer.Bytes())
- if err != nil {
- buffer.Release()
- return nil, err
- }
- buffer.Resize(0, int32(nBytes))
- return buf.MultiBuffer{buffer}, nil
- }
- func (m *MonoDestUDPConn) WriteMultiBuffer(buffer buf.MultiBuffer) error {
- for _, b := range buffer {
- _, err := m.AbstractPacketConn.WriteTo(b.Bytes(), m.dest)
- if err != nil {
- return err
- }
- }
- buf.ReleaseMulti(buffer)
- return nil
- }
- func (m *MonoDestUDPConn) Read(p []byte) (n int, err error) {
- n, _, err = m.AbstractPacketConn.ReadFrom(p)
- return
- }
- func (m *MonoDestUDPConn) Write(p []byte) (n int, err error) {
- return m.AbstractPacketConn.WriteTo(p, m.dest)
- }
|