
On Wed, Jun 2, 2010 at 10:10 PM, Matthias Reisner
Hi,
there's something wrong with port numbers in the Network.Socket module of package network. Printing values gives:
*Main> PortNum 8888 47138 *Main> PortNum 47138 8888
So I thought it's just an error in the show instance of PortNumber, which shows the bytes flipped. But if I use the following code snippet
sock <- socket AF_INET Datagram 0 bindSocket sock $ SockAddrInet (PortNum 8888) iNADDR_ANY
to bind a socket to port 8888, netstat and TCPView reveal that the socket is actually bound to the wrong port 47138. I'm using network-2.2.1.7 on Windows XP. Is that a bug or am I doing something wrong here?
Hi Matthias, The PortNum constructor should rarely be used directly - it contains the port number in network-order. You should try: bindSocket sock $ SockAddrInet 8888 iNADDR_ANY Here I'm we're a numeric literal, which implicitly calls (fromIntegral 8888), which correctly converts to network order for us. It's not obvious from that haddocks that this is the way to go. Take care, Antoine