쓰레드 안쓴놈(동시접속불가) 코드 보기
-- http://www.haskell.org/ghc/docs/latest/html/libraries/network/Network.html
--
-- 를 보고 만들어본 echo 아직 thread 사용법을 몰라서 뭐 별로 하는건
-- 없고 그냥 소켓을 이렇게 쓰는구나 정도..
--
-- 아 그리고 withSocketsDo 라는게 특이한데 win32 에서 소켓초기화해주는
-- 부분을 명시적으로 따로 뽑은 모양이네. 조낸 불편하군.
import Network
import Debug.Trace
import System.IO
echo :: Handle -> IO ()
echo sock = do
c <- hGetChar sock
hPutChar sock c
echo sock
main :: IO ()
main =
withSocketsDo $ do
sock <- listenOn (PortNumber 9413)
(handle,peer,port) <- accept sock
putTraceMsg $ "accepted " ++ (show handle) ++ (show peer) ++ (show port)
echo(handle)
return ()쓰레드 쓴놈 코드 보기
-- 소켓연결당 쓰레드 하나 까는 예제.
-- http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html
-- 를 참고해서 만들었다.
--
-- 쓰레드간에 상호작용이 없으니 간단하게 끝났다.. 코드는 좀
-- 지저분하지만.. 별수없지.
--
-- acceptLoop 에서 sock 을 인자로 굳이 받지 않아도 위쪽에서 sock 을
-- 들고있으니 접근이 가능할줄 알았는데 (lexical scoping) 안되더라. 음
-- 내가 잘못안건가 아니면 모나드 때문인가 where 를 이렇게 쓸수는 없나?
--
--
import Network
import Debug.Trace
import System.IO
import Control.Concurrent
echo :: Handle -> IO ()
echo sock = do
c <- hGetChar sock
hPutChar sock c
echo sock
main :: IO ()
main =
withSocketsDo $ do
sock <- listenOn (PortNumber 9413)
acceptLoop sock
where acceptLoop sock = do
(handle, peer, port) <- accept sock
putTraceMsg $ "accepted " ++ (show handle) ++ (show peer) ++ (show port)
forkIO (echo handle)
acceptLoop sock
댓글 없음:
댓글 쓰기