[Haskell-cafe] Two GET HTTP requests

Yusaku Hashimoto nonowarn at gmail.com
Tue Feb 9 00:41:53 EST 2010


Try to reinstall HTTP package also. I think your HTTP package is still
linked with old broken network package.

HTTP depends on network. And network is a binding for network API of
OS. These API is for C-language. When ghc builds such binding
packages, It runs gcc for some purpose. gcc thinks you need 64bit
binary (from SL, I believe.) and works for 64bit environment. But ghc
on Mac can only build 32bit binaries. So it causes the problem.

You can check if network package was correctly built by running this.
This takes a host name, and gets the root document of the host via
HTTP using a socket. Build and try `./this_program haskell.org`

import Network.Socket
import System.IO
import System.Environment

getAddr :: HostName -> IO AddrInfo
getAddr host = head `fmap`
               (getAddrInfo (Just defaultHints { addrSocketType = Stream })
                            (Just host)
                            (Just "http"))

connected :: HostName -> IO Socket
connected host = do
    addrinfo <- getAddr host
    sock <- socket (addrFamily addrinfo)
                   (addrSocketType addrinfo)
                   (addrProtocol addrinfo)
    connect sock (addrAddress addrinfo)
    return sock

httpGet :: HostName -> IO String
httpGet host = do
    h <- flip socketToHandle ReadWriteMode =<< connected host
    hSetBuffering h NoBuffering
    hPutStr h "GET / HTTP/1.0\r\n\r\n"
    hGetContents h

main = fmap head getArgs >>= httpGet >>= putStr

I should have mentioned them in my last mail. Sorry.

By the way, ghc-6.12 on Mac still can not build 64bit binaries. So
upgrading ghc won't solve it.

--nwn

On Mon, Feb 8, 2010 at 12:50 AM, Chris Eidhof <chris at eidhof.nl> wrote:
> Thanks. Unfortunately, it didn't help. The thing that frustrates me is that it's quite hard to debug. I guess I'll upgrade my GHC to 6.12, hopefully that'll solve it.
>
> -chris
>
> On 7 feb 2010, at 16:07, Yusaku Hashimoto wrote:
>
>> Hello,
>>
>> On Sat, Feb 6, 2010 at 2:51 AM, Chris Eidhof <chris at eidhof.nl> wrote:
>>> Approach 3: I used the simpleHTTP function from the HTTP package. This crashed, after I dug a little deeper into the code, it threw an error on calling the parseURI function (openFile: no such file exists). I installed the latest network package and upgraded my HTTP package, and the parseURI error went away. I felt like I was almost there, and tried the following:
>>>
>>>> simpleHTTP (getRequest "http://haskell.org")
>>>
>>> This failed with just the text "Bus error". I searched the HTTPBis git repository, but couldn't find the text "Bus error". I don't have a clue of how to fix this.
>>
>> Try reinstall network package with `cabal install --reinstall
>> --hsc2hs-options="--cflag=-m32 --lflag=-m32"`.
>>
>> See also: http://hackage.haskell.org/trac/ghc/ticket/3681
>>
>> Hope this helps.
>> --nwn
>
>


More information about the Haskell-Cafe mailing list