hFlushを忘れずに

Haskellで簡単なサーバーを書いて嵌ったこと。
クライアントでデータを送る際、hFlushしないと送り終わる前に接続が切れてしまう。

import Network
import System.IO

main :: IO ()
main = withSocketsDo $ do
    hSetBuffering stdout NoBuffering
    server `catch` (const $ putStrLn "Exception caught.")
    putStrLn "Connection closed."

server :: IO ()
server = do
    sock <- listenOn (PortNumber 31400)
    (h, _, _) <- accept sock
    hPutStr h "Hello"
    hFlush h -- ないと送信が終わる前に接続切れる。
    sClose sock


参考:
Simple Servers - HaskellWiki