如何在ghci中终止套接字服务器



我用webserver包编写了一个web服务器,可以在ghci中使用:

:main localhost 8000

如果我Ctrl-C它并再次运行,我得到

*** Exception: bind: resource busy (Address already in use)

所以套接字似乎绑定到我的ghci会话。

我如何释放端口绑定,以便我可以:reload并重新启动它而不退出ghci?

如果底层服务器实现没有在套接字上设置REUSE_ADDR选项,则通常会发生这种情况。

通常,如果您突然终止服务器,操作系统将该服务器的旧端口保持在2MSL状态几分钟,以防止该端口上的新服务器意外接收到用于前一个连接的旧消息。如果您在尝试绑定端口时设置了REUSE_ADDR,您可以指定希望在2MSL周期结束之前强制重用它。

您可以修复此问题的唯一方法是修改用于在绑定侦听套接字之前设置REUSE_ADDR选项的底层web服务器的代码。

您使用Linux吗?如果是,我认为你必须使用lsof来找出哪个进程正在使用给定的端口,然后杀死PID。我已经有一个问题,像Flask在Python,所以我认为这是同样的事情在这里。让ghci保持打开状态,终止进程,然后重新加载ghci。这不是一种优雅的方法,但如果它有效,那就是好的!

最新更新