[Haskell] Re: Existing Haskell IPv6 Code

Einar Karttunen ekarttun at cs.helsinki.fi
Thu May 12 07:54:32 EDT 2005


Peter Simons <simons at cryp.to> writes:
> Judging from a quick glance, the code seems to marshal the
> POSIX API:
>
>   type SockAddrLen   = Int
>   data SockAddrT
>   type SockAddr      = ForeignPtr SockAddrT
>   data SocketAddress = SA !SockAddr !SockAddrLen
>
> I'm not sure whether that's a useful representation. It
> works, of course, but it appears that an address is
> essentially opaque (unless you want to do more FFI things).
> It doesn't really unify different types of network addresses
> either. Note, for example, that you can't pass such an
> address to the 'connectTCP' function.

That is one of the few working representations.
The user of the library is not aware how the socket addresses
are represented internally, so it is not a problem. 

Lifting the information to Haskell level seems quite pointless,
as it is usually just fed back to the C functions. Also IPv6
addresses sometimes need scopes - lifting this would make 
things even more messy.

The current way is to ignore adress families as much as possible
while still supporting multiple ones. E.g. the following works
with both IPv4 and IPv6 in network-alt:

googleMainPage = do
  h <- connectTCP "www.google.com" "http"
  hPutStr h "GET / HTTP/1.0\r\n\r\n"
  hFlush h
  hGetContents h >>= print
  hClose h


- Einar Karttunen


More information about the Haskell mailing list