Skip to content

Commit 600ea70

Browse files
committed
stop waiting for ctrl+c fix
1 parent b44fc79 commit 600ea70

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

internal/server/session.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package server
33
import (
44
"encoding/binary"
55
"fmt"
6+
"time"
67

78
"github.com/k8shell-io/common/models"
89
"golang.org/x/crypto/ssh"
@@ -250,15 +251,29 @@ func (s *Server) handleShellRequest(sshConn *ssh.ServerConn, connInfo *Connectio
250251
case <-stopChan:
251252
return
252253
default:
253-
n, err := channel.Read(buffer)
254+
size, err := channel.ReadBufferSize()
254255
if err != nil {
255256
return
256257
}
257258

258-
if n > 0 && buffer[0] == 3 {
259-
s.log.Info().Msgf("Ctrl+C detected for user %s, canceling shell session", session.Username)
260-
connInfo.cancel()
261-
return
259+
if size > 0 {
260+
n, err := channel.Read(buffer)
261+
if err != nil {
262+
return
263+
}
264+
265+
if n > 0 && buffer[0] == 3 {
266+
s.log.Info().Msgf("Ctrl+C detected for user %s, canceling shell session", session.Username)
267+
connInfo.cancel()
268+
return
269+
}
270+
} else {
271+
select {
272+
case <-stopChan:
273+
return
274+
case <-time.After(10 * time.Millisecond):
275+
// Continue checking
276+
}
262277
}
263278
}
264279
}

0 commit comments

Comments
 (0)