Ticket #12 (closed defect: fixed)

Opened 5 years ago

Last modified 5 years ago

Bug in network library, uncaught exception when dealing with ipv6 sockets

Reported by: tibbe Owned by: bos
Priority: major Milestone:
Component: network Version:
Keywords: Cc: tphyahoo@…

Description

There is an uncaught exception in the network library which is causing my HAppS demo website

http://happstutorial.com

to crash every couple of days. This has affected other people using HAppS as well, as described on postings to the HAppS users list.

The bug, and workarounds, is described at

http://code.google.com/p/happs/issues/detail?id=40

Initially reported patch at

http://www.haskell.org/pipermail/libraries/2009-January/011103.html

Patch is attached.


The bug seems legitimate. Thanks for reporting it. The patch is a bit crufty, so I'll work something cleaner up.


Yes, not a very good patch I agree. I had an uncaught exception error a couple of days after I implemented.

Anyway, here's a tweaked patch, which at least fixes that.

<  (Just peer, _) <- getNameInfo [] True False addr
---
>  (Just peer) <-
>     catchIO ( return . fst =<< getNameInfo [] True False addr )
>             (\e -> case addr of
>                      SockAddrInet port haddr -> return . Just =<< inet_ntoa haddr
>                      SockAddrInet6 port flow haddr6 scope -> return . Just . show $ haddr6
>                      SockAddrUnix x -> return . Just $ x
>             )
>

Also, for what it's worth, a quick and dirty fix which at least keeps happs apps from dying is simply to turn off ipv6 support like so:

diff -rN old-network-2.2.0.1/Network.hs new-network-2.2.0.1/Network.hs
22c22
< #define IPV6_SOCKET_SUPPORT 1
---
> # /* define IPV6_SOCKET_SUPPORT 1 */

FWIW, I think liftM fst is clearer than return . fst =<<.


Moved from http://hackage.haskell.org/trac/ghc/ticket/2927

Change History

Changed 5 years ago by bos

  • status changed from new to closed
  • resolution set to fixed

Fixed in darcs.

Note: See TracTickets for help on using tickets.