Commit 29696014 authored by rui.zheng's avatar rui.zheng

fix kcp client connection

parent dc0b4f54
......@@ -191,7 +191,12 @@ func (tr *kcpTransporter) Dial(addr string, options ...DialOption) (conn net.Con
session, ok := tr.sessions[addr]
if !ok {
return net.DialUDP("udp", nil, uaddr)
conn, err = net.DialUDP("udp", nil, uaddr)
if err != nil {
return
}
session = &kcpSession{conn: conn}
tr.sessions[addr] = session
}
return session.conn, nil
}
......@@ -209,7 +214,7 @@ func (tr *kcpTransporter) Handshake(conn net.Conn, options ...HandshakeOption) (
defer tr.sessionMutex.Unlock()
session, ok := tr.sessions[opts.Addr]
if !ok {
if !ok || session.session == nil {
s, err := tr.initSession(opts.Addr, conn, config)
if err != nil {
conn.Close()
......@@ -229,13 +234,15 @@ func (tr *kcpTransporter) Handshake(conn net.Conn, options ...HandshakeOption) (
}
func (tr *kcpTransporter) initSession(addr string, conn net.Conn, config *KCPConfig) (*kcpSession, error) {
pc, ok := conn.(net.PacketConn)
udpConn, ok := conn.(*net.UDPConn)
if !ok {
return nil, errors.New("wrong connection type")
}
kcpconn, err := kcp.NewConn(addr,
blockCrypt(config.Key, config.Crypt, KCPSalt), config.DataShard, config.ParityShard, pc)
blockCrypt(config.Key, config.Crypt, KCPSalt),
config.DataShard, config.ParityShard,
&kcp.ConnectedUDPConn{UDPConn: udpConn, Conn: udpConn})
if err != nil {
return nil, err
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment