
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...
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
On Fri, Mar 7, 2008 at 8:10 AM, Scott Bell
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