Hello Adam,

After taking a closer look, the network module does do the ntohs() FFI call:
http://haskell.org/ghc/docs/latest/html/libraries/network/src/Network-Socket.html#PortNumber

Thus, I think the issue is probably that Scott's UDP Client does not do the htons() for the port number, or if the UDP Client is in Haskell, then it is not using the Portnumber constructor.
__
Donnie


On 3/7/08, Adam Langley <agl@imperialviolet.org> wrote:
On Fri, Mar 7, 2008 at 8:10 AM, Scott Bell <sebell@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.

We should really fix this unless there's some trick that I've been
missing all this time.


AGL


--
Adam Langley agl@imperialviolet.org http://www.imperialviolet.org

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe