我正在运行这个例子。它有效。但是,如果我运行另一个实例,我预计它会因异常而崩溃,但是没有。预期的异常应该说"端口3000已经在使用",当你在不同的终端运行两个python -m SimpleHTTPServer 8000
时,这是一个类似的错误。
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Data.Monoid (mconcat)
main = scotty 3000 $
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
答案 0 :(得分:2)
这是因为scotty使用的Data.Streaming.Network
库(通过warp,scotty使用)获取了一个可能的地址列表,这些地址跨越IPv4和IPv6,然后尝试绑定到每个上的端口一次解决一个,丢弃任何IO异常。
在端口3000上有两个scotty实例,我看到:
% netstat -an | grep 3000
tcp46 0 0 *.3000 *.* LISTEN
tcp4 0 0 *.3000 *.* LISTEN
尝试第三个scotty实例我看到了:
% ./x
Setting phasers to stun... (port 3000) (ctrl-c to quit)
x: Network.Socket.bind: resource busy (Address already in use)