[Haskell-cafe] Re: Network.Socket Woes

Benedikt Schmidt beschmi at gmail.com
Fri Mar 7 14:04:10 EST 2008


"Adam Langley" <agl at imperialviolet.org> writes:

> On Fri, Mar 7, 2008 at 8:10 AM, Scott Bell <sebell at gmail.com> wrote:
>>  my test program. The Haskell version, however, does not
>>  return from recvFrom. I've also tried wrapping this in a
>>  withSocketsDo, with no effect.
>
> So this is a long standing, ah, issue with the Network modules.
>
> Try sending a UDP packet to port 45607 and you'll find that the
> Haskell code gets it.
>
> hex(45607) = 0xb227
> 0x27b2 = 10162
>
> In short, PortNum doesn't do the endian conversion for you. And I
> don't know a good way to figure out the endianness of the underlying
> system from Haskell I'm afraid. I usually end up FFIing out to htons
> or just assuming that the system is little-endian.

The PortNumber type is an instance of Num, so it works  if you do not
use the PortNum constructor.

Prelude Network.Socket> case 10162 :: PortNumber of PortNum p -> p
45607

Benedikt



More information about the Haskell-Cafe mailing list