[Haskell-beginners] Implementing a toy network proxy
patrick.leboutillier at gmail.com
Thu Sep 23 13:13:53 EDT 2010
I'm trying to write a toy generic network proxy that will accept
connections on a port, and for each connection connect
to a remote server and forward the traffic.
Here's what I have do far:
copy :: Handle -> Handle -> IO ()
copy a b = undefined
redir :: Handle -> Handle -> IO ()
redir h1 h2 = forkIO (copy h1 h2) >> forkIO (copy h2 h1) >> return ()
acceptLoop :: Socket -> HostName -> PortID -> IO ()
acceptLoop sock rhost rport = loop
where loop = do
(local, host, port) <- accept sock
remote <- connectTo rhost rport
redir local remote
loop >> return ()
main = do
let local_port = 8000
let remote_host = "whatever"
let remote_port = 80
server <- listenOn (PortNumber local_port)
acceptLoop server remote_host (PortNumber remote_port)
Basically I'm stuck at how to implement the copy function. I want it
to block until some data is available on a,
read it and then write it to b.
I think I need to use hGetBufNonBlocking, but I don't know how to get a "Ptr a".
I am on the right track with this?
Rosemère, Québec, Canada
More information about the Beginners