socket question

Hal Daume III hdaume@ISI.EDU
Fri, 8 Feb 2002 16:42:39 -0800 (PST)


suppose i want to write a stupid ftp client, i want to connect to the ftp
server, wait for it to give it's intro stuff (welcome to blah,
username: ) and then it wants input.  how do i do something like this?

so far, i have (don't laugh, this is the first socket haskell program i've
written.  ever.)

> connect cfg = withSocketsDo $ 
>     do h <- connectTo (remoteAddr cfg) (Service (remoteType cfg))
>        hWaitForInput h 1000
>        s <- readWhileAvailable h
>        return s
>
> readWhileAvailable h =
>     do b <- hReady h
>        if b
> 	 then do c <- hGetChar h
> 		 s <- readWhileAvailable h
> 		 return (c : s)
> 	 else do return []

but this doesn't seem to ever halt :)

if i get rid of the hWaitForInput, it returns immediately with nothing.

if i replace hWaitForInput...readWhileAvailable with "s <- getContents h
; return (take 10 s)" i get the beginning of the intro message (so it is
connecting properly).

please someone help me :)


--
Hal Daume III

 "Computer science is no more about computers    | hdaume@isi.edu
  than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume