从终端关闭服务器的正确方法是什么?

时间:2015-04-30 16:45:10

标签: go network-programming

我正在尝试Go中的一些基本聊天(服务器+客户端)的东西,所以我有一个服务器,它侦听特定端口,我有一个写入此端口的客户端。

然而,由于我是新手,我不断进行更改并且必须重新启动服务器等。每次我想停止服务器时,我一直在做'Ctrl + C',但这显然是愚蠢的,因为我必须改变每次编译时的端口号...这样做的正确方法是什么?我现在正在做

defer ln.Close()
建立连接后,在服务器的主要功能中

但我猜Ctrl + C只是在没有关闭连接的情况下杀死进程?

编辑:更多信息。 我在Windows上运行cygwin。 ps显示没有旧进程,但我在任务管理器中发现了“server.exe”(我的服务器文件名为server.go)。

1 个答案:

答案 0 :(得分:0)

除非您使用os/signal程序包在Ctrl+C时通知您,否则您的延期声明将无法运行。

这是一个处理SIGINT(Ctrl + C)以干净地退出程序的示例。

func main() {
    done := make(chan os.Signal)
    go signal.Notify(done, syscall.SIGINT)

    go func() {
         // your tcp server goes here along with the defer to clean up your server
    }()

    <-done

    // exit cleanly
}