Skip to content

Commit ea4d1d7

Browse files
committed
kcp no delay
1 parent ad41b27 commit ea4d1d7

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

tsshd/proto.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,3 +182,42 @@ func RecvError(session *kcp.UDPSession) error {
182182
}
183183
return nil
184184
}
185+
186+
func NewKcpSession(addr string, key []byte, cmd string) (session *kcp.UDPSession, err error) {
187+
block, err := kcp.NewAESBlockCrypt(key)
188+
if err != nil {
189+
return nil, fmt.Errorf("new aes block crypt failed: %v", err)
190+
}
191+
192+
done := make(chan struct{}, 1)
193+
go func() {
194+
defer func() {
195+
if err != nil && session != nil {
196+
session.Close()
197+
}
198+
done <- struct{}{}
199+
close(done)
200+
}()
201+
session, err = kcp.DialWithOptions(addr, block, 10, 3)
202+
if err != nil {
203+
err = fmt.Errorf("kcp dial [%s] [%s] failed: %v", addr, cmd, err)
204+
return
205+
}
206+
session.SetNoDelay(1, 10, 2, 1)
207+
if err = SendCommand(session, cmd); err != nil {
208+
err = fmt.Errorf("kcp send command [%s] [%s] failed: %v", addr, cmd, err)
209+
return
210+
}
211+
if err = RecvError(session); err != nil {
212+
err = fmt.Errorf("kcp new session [%s] [%s] failed: %v", addr, cmd, err)
213+
return
214+
}
215+
}()
216+
217+
select {
218+
case <-time.After(10 * time.Second):
219+
err = fmt.Errorf("kcp new session [%s] [%s] timeout", addr, cmd)
220+
case <-done:
221+
}
222+
return
223+
}

tsshd/service.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ func serve(listener *kcp.Listener) {
6464
func handleSession(session *kcp.UDPSession) {
6565
defer session.Close()
6666

67+
session.SetNoDelay(1, 10, 2, 1)
68+
6769
command, err := RecvCommand(session)
6870
if err != nil {
6971
SendError(session, fmt.Errorf("recv session command failed: %v", err))

0 commit comments

Comments
 (0)