id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc
1,unpackFamily on Windows fails match,igloo,bos,"Initially reported here: http://hackage.haskell.org/trac/ghc/ticket/2250

----

In the HostEntry returned by Network.BSD.getHostByName, evaluating the hostFamily field causes the following error, which is pointing at the unpackFamily function:

{{{
*** Exception: Network/Socket.hsc:(1711,17)-(1777,13): Non-exhaustive patterns in case
}}}

This occurs with 6.8.2 and 6.9.20080323 i386. The machine is running Windows Server 2008 x64.

----

I modified Network/BSD.hs to trace out the h_addrtype variable in Storable `HostEntry`'s peek, and it had the value 0x40002. The corresponding variable in the C struct should be a short, but is inferred to be CInt in the Haskell source, probably thanks to unpackFamily having type CInt -> Family. Due to that, it reads the family as an int, consuming the following length field as well.

I hacked past this by giving the peek of h_addrtype an annotation of "":: IO CShort"" and adding a fromIntegral at the call to unpackFamily to convert it to the CInt that the unpackFamily function expects.

----

Great stuff, thanks! It looks like it should be `CSaFamily` rather than `CInt`. Likewise `packFamily`, and I expect the whole library could do with an audit. 

----

I can reproduce the exact bug on the following combinations:

- GHC 6.8.2, x86, Windows XP - GHC 6.8.3, x86, Windows XP - GHC 6.8.2, x86, Windows Vista - GHC 6.8.3, x86, Windows Vista - GHC 6.8.2, x64, Windows Vista - GHC 6.8.3, x64, Windows Vista

",defect,closed,major,,network,,fixed,,
