我用webserver包编写了一个网络服务器,可以用ghci启动它:
:main localhost 8000
如果我 Ctrl-C 并再次运行,我会
*** Exception: bind: resource busy (Address already in use)
所以套接字似乎与我的ghci会话绑定。
如何释放该端口绑定,以便我:reload
可以在不退出ghci的情况下重新启动它?
答案 0 :(得分:3)
如果底层服务器实现没有在套接字上设置REUSE_ADDR
选项,则通常会发生这种情况。
通常,如果您突然终止服务器,操作系统会将该服务器的旧端口保持在2MSL状态几分钟,以防止该端口上的新服务器意外接收用于先前连接的旧消息。如果在尝试绑定端口时设置REUSE_ADDR
,则指定在2MSL周期结束之前强制重用它。
解决此问题的唯一方法是修改用于在绑定侦听套接字之前设置REUSE_ADDR
选项的基础Web服务器的代码。
答案 1 :(得分:0)
你在Linux上吗?如果是,我认为您必须使用lsof
来找出使用给定端口的进程,然后才能终止PID。我已经在Python中使用Flask这样的问题,所以我认为这是同样的事情。你将ghci打开,杀死进程然后重新加载ghci。它不是一种优雅的方法,但如果它有效,那就太好了!