|  | module TServer(run_basic_server,run_threaded_server) where | 
|  |  | 
|  | import Network | 
|  | import Thrift | 
|  | import Control.Exception | 
|  | import TBinaryProtocol | 
|  | import TChannelTransport | 
|  | import Control.Concurrent | 
|  |  | 
|  | proc_loop hand proc ps = do v <-proc hand ps | 
|  | if v then proc_loop hand proc ps | 
|  | else return () | 
|  |  | 
|  | accept_loop accepter hand sock proc transgen iprotgen oprotgen = | 
|  | do (h,hn,_) <- accepter sock | 
|  | let t = transgen h | 
|  | let ip = iprotgen t | 
|  | let op = oprotgen t | 
|  | forkIO (handle (\e -> return ()) (proc_loop hand proc (ip,op))) | 
|  | accept_loop accepter hand sock proc transgen iprotgen oprotgen | 
|  |  | 
|  | run_threaded_server accepter listener hand proc port transgen iprotgen oprotgen = | 
|  | do sock <- listener | 
|  | accept_loop accepter hand sock proc transgen iprotgen oprotgen | 
|  | return () | 
|  |  | 
|  |  | 
|  | -- A basic threaded binary protocol socket server. | 
|  | run_basic_server hand proc port = run_threaded_server accept (listenOn (PortNumber port)) hand proc port TChannelTrans TBinaryProtocol TBinaryProtocol |