diff --git a/CHANGELOG.md b/CHANGELOG.md index dd85f0c..e5eeb71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## UNRELEASED +### Changed +- Properly close stream if `Ctrl+C` is pressed in interactive mode. ## [v0.8.4] 2024-03-09 ### Changed diff --git a/main.go b/main.go index e0d1d14..5c44195 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,7 @@ import ( "net" "os" "os/signal" + "runtime" "strings" "time" @@ -466,17 +467,20 @@ func main() { signal.Notify(c, os.Interrupt) go func() { for range c { - cancel() - client.Close() - os.Exit(0) + closeAndExit(client, cancel, nil) } }() for { message, err = reader.ReadString('\n') - message = strings.TrimSuffix(message, "\n") - if err != nil { - closeAndExit(client, cancel, errors.New("failed to read from stdin")) + select { + case <-ctx.Done(): + return + default: + if err != nil { + closeAndExit(client, cancel, errors.New("failed to read from stdin")) + } } + message = strings.TrimSuffix(message, "\n") // Remove invalid code points. message = validUTF8(message)