On Fri, May 23, 2008 at 3:27 PM, Eric <eeoam@ukfsn.org> wrote:
Hi all,
I've written the following program to connect to a submit an HTTP GET request to a server and print the response:
module Main where
import Network import System.IO
main = withSocketsDo go
go = do putStrLn "Connecting..." out <- connectTo "haskell.org" (PortNumber 80) hPutStrLn out "GET /\r" hPutStrLn out "Host: haskell.org\r" hPutStrLn out "\r" cs <- hGetLine out hClose out print cs
When I run the program, however, I get the following error:
HTTPClient: <socket: 1872>: hGetLine: end of file
Can anyone see what's wrong?
I think you need to either print cs before you close the socket or make sure that cs is force (~computed) before you close the socket as laziness makes it get evaluated when you call print cs rather than when you call hGetLine. In other words, you try to read from the socket after you've closed it. Cheers, Johan