Ant*_*ton 0 sockets haskell network-programming io-monad
我写了一个tcp服务器,这是我的主循环方法:
serverLoop :: Socket -> IO ()
serverLoop sock = do
(conn, _) <- accept sock
forkIO $ handleConn conn
serverLoop sock
Run Code Online (Sandbox Code Playgroud)
(注意:handleConn :: Socket -> IO ()是我的程序特有的功能.)
我想将它重构成更加一元的方式,这是我的试探性的:
serverLoop :: Socket -> IO ()
serverLoop sock = foldl1 (>>) $ map go $ repeat sock
where go sock = (accept sock) >>= (forkIO . handleConn . fst) >> return ()
Run Code Online (Sandbox Code Playgroud)
但是,一旦我开始通过套接字发送数据,这会使程序崩溃.
以下是我的问题:为什么?有什么办法解决的?
Cir*_*dec 11
永远一遍又一遍地重复同样动作的惯用方法是 forever
serverLoop :: Socket -> IO ()
serverLoop sock = forever $ do
(conn, _) <- accept sock
forkIO $ handleConn conn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |