[Haskell-cafe] Two GET HTTP requests

Chris Eidhof chris at eidhof.nl
Wed Feb 10 04:52:57 EST 2010


Hi nwn,

I had the following error:

Run: Network/Socket/Internal.hsc:(298,2)-(314,60): Non-exhaustive patterns in case. The code for those lines look like this:

> peekSockAddr p = do
>   family <- (#peek struct sockaddr, sa_family) p
>   case family :: CSaFamily of
> #if defined(DOMAIN_SOCKET_SUPPORT)
>     (#const AF_UNIX) -> do
>         str <- peekCString ((#ptr struct sockaddr_un, sun_path) p)
>         return (SockAddrUnix str)
> #endif
>     (#const AF_INET) -> do
>         addr <- (#peek struct sockaddr_in, sin_addr) p
>         port <- (#peek struct sockaddr_in, sin_port) p
>         return (SockAddrInet (PortNum port) addr)
> #if defined(IPV6_SOCKET_SUPPORT)
>     (#const AF_INET6) -> do
>         port <- (#peek struct sockaddr_in6, sin6_port) p
>         flow <- (#peek struct sockaddr_in6, sin6_flowinfo) p
>         addr <- (#peek struct sockaddr_in6, sin6_addr) p
>         scope <- (#peek struct sockaddr_in6, sin6_scope_id) p
>         return (SockAddrInet6 (PortNum port) flow addr scope)
> #endif


Thanks for all your help. I'll first upgrade to a new GHC and then try again.

-chris

On 9 feb 2010, at 06:41, Yusaku Hashimoto wrote:

> 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