mirror of
https://github.com/wweir/sower.git
synced 2024-04-21 12:42:15 +00:00
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package kcp
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/pkg/errors"
|
|
kcp "github.com/xtaci/kcp-go"
|
|
)
|
|
|
|
type client struct {
|
|
DataShard int
|
|
ParityShard int
|
|
DSCP int
|
|
SockBuf int
|
|
AckNodelay bool
|
|
NoDelay int
|
|
Interval int
|
|
Resend int
|
|
NoCongestion int
|
|
SndWnd int
|
|
RcvWnd int
|
|
MTU int
|
|
}
|
|
|
|
func NewClient() *client {
|
|
return &client{
|
|
DataShard: 10,
|
|
ParityShard: 3,
|
|
DSCP: 0,
|
|
SockBuf: 4194304,
|
|
NoDelay: 0,
|
|
Interval: 50,
|
|
Resend: 0,
|
|
NoCongestion: 0,
|
|
SndWnd: 0,
|
|
RcvWnd: 0,
|
|
MTU: 1350,
|
|
}
|
|
}
|
|
|
|
func (c *client) Dial(server string) (net.Conn, error) {
|
|
conn, err := kcp.DialWithOptions(server, nil, c.DataShard, c.ParityShard)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "dial")
|
|
}
|
|
|
|
conn.SetStreamMode(true)
|
|
conn.SetWriteDelay(false)
|
|
conn.SetNoDelay(c.NoDelay, c.Interval, c.Resend, c.NoCongestion)
|
|
conn.SetWindowSize(c.SndWnd, c.RcvWnd)
|
|
conn.SetMtu(c.MTU)
|
|
conn.SetACKNoDelay(c.AckNodelay)
|
|
|
|
if err := conn.SetDSCP(c.DSCP); err != nil {
|
|
return nil, errors.Wrap(err, "SetDSCP")
|
|
}
|
|
if err := conn.SetReadBuffer(c.SockBuf); err != nil {
|
|
return nil, errors.Wrap(err, "SetReadBuffer")
|
|
}
|
|
if err := conn.SetWriteBuffer(c.SockBuf); err != nil {
|
|
return nil, errors.Wrap(err, "SetWriteBuffer")
|
|
}
|
|
|
|
return conn, nil
|
|
}
|