README
¶
utp
Package utp implements uTP, the micro transport protocol as used with Bittorrent. It opts for simplicity and reliability over strict adherence to the (poor) spec.
Supported
- Multiple uTP connections switched on a single PacketConn, including those initiated locally.
- Raw access to the PacketConn for non-uTP purposes, like sharing the PacketConn with a DHT implementation.
Implementation characteristics
- Receive window size is used to limit out of order packets received.
- There is no MTU path discovery. The minimum size is always used.
- A fixed 64 slot selective ack window is used in both sending and receiving.
- All received non-ACK packets are ACKed in response.
Patches welcomed.
Documentation
¶
Overview ¶
Package utp implements uTP, the micro transport protocol as used with Bittorrent. It opts for simplicity and reliability over strict adherence to the (poor) spec. It allows using the underlying OS-level transport despite dispatching uTP on top to allow for example, shared socket use with DHT. Additionally, multiple uTP connections can share the same OS socket, to truly realize uTP's claim to be light on system and network switching resources.
Socket is a wrapper of net.UDPConn, and performs dispatching of uTP packets to attached uTP Conns. Dial and Accept is done via Socket. Conn implements net.Conn over uTP, via aforementioned Socket.
Index ¶
- func Dial(addr string) (net.Conn, error)
- func DialTimeout(addr string, timeout time.Duration) (nc net.Conn, err error)
- type Conn
- func (c *Conn) Close() error
- func (c *Conn) LocalAddr() net.Addr
- func (c *Conn) Read(b []byte) (n int, err error)
- func (c *Conn) RemoteAddr() net.Addr
- func (c *Conn) SetDeadline(t time.Time) error
- func (c *Conn) SetReadDeadline(t time.Time) error
- func (c *Conn) SetWriteDeadline(t time.Time) error
- func (c *Conn) String() string
- func (c *Conn) Write(p []byte) (n int, err error)
- type Socket
- func (s *Socket) Accept() (c net.Conn, err error)
- func (s *Socket) Addr() net.Addr
- func (s *Socket) Close() (err error)
- func (s *Socket) Dial(addr string) (net.Conn, error)
- func (s *Socket) DialTimeout(addr string, timeout time.Duration) (nc net.Conn, err error)
- func (s *Socket) LocalAddr() net.Addr
- func (s *Socket) ReadFrom(p []byte) (n int, addr net.Addr, err error)
- func (c *Socket) SetDeadline(t time.Time) error
- func (c *Socket) SetReadDeadline(t time.Time) error
- func (c *Socket) SetWriteDeadline(t time.Time) error
- func (s *Socket) WriteTo(b []byte, addr net.Addr) (int, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn is a uTP stream and implements net.Conn. It owned by a Socket, which handles dispatching packets to and from Conns.
func (*Conn) RemoteAddr ¶
func (*Conn) SetDeadline ¶
func (*Conn) SetReadDeadline ¶
func (*Conn) SetWriteDeadline ¶
type Socket ¶
type Socket struct { // If a read error occurs on the underlying net.PacketConn, it is put // here. This is because reading is done in its own goroutine to dispatch // to uTP Conns. ReadErr error // contains filtered or unexported fields }
A Socket wraps a net.PacketConn, diverting uTP packets to its child uTP Conns.
func NewSocket ¶
addr is used to create a listening UDP conn which becomes the underlying net.PacketConn for the Socket.
func (*Socket) Close ¶
Marks the Socket for close. Currently this just axes the underlying OS socket.