fix kcp client connection

This commit is contained in:
rui.zheng 2017-07-26 22:15:46 +08:00
parent dc0b4f5423
commit 29696014f2

View File

@ -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
}