[Haskell-beginners] recvFrom return value different from length of resulting string
ktvoelker at gmail.com
Sat May 11 20:43:15 CEST 2013
Unless your network data happens to be character data using the encoding
assumed by the functions in Network.Socket, bad things are going to happen.
Here is a quote from Network.Socket:
"Do not use the send and recv functions defined in this module in new code,
as they incorrectly represent binary data as a Unicode string. As a result,
these functions are inefficient and may lead to bugs in the program."
On Fri, May 10, 2013 at 1:50 PM, Nathan Hüsken <nathan.huesken at posteo.de>wrote:
> It works when I am using Network.Socket.ByteString.
> I assume this is because the other recvFrom encodes the message with
> peekCStringLen, but I am not sure.
> Should the 2 implementations not behave the same besides returning a
> different datastructure for the received data??
> On 05/10/2013 06:34 PM, Nathan Hüsken wrote:
>> I am trying to write a small haskell application which forwards udp
>> messages. The complete program is here: http://hpaste.org/87681
>> Notice the lines:
>> 43 (msg,bytes,addr) <- recvFrom sock 1024
>> 44 putStrLn $ "Received: " ++ show bytes ++ " = " ++ (show . length $
>> If I understand correctly, bytes is the number of bytes in the message.
>> This should be äquivalent to (length msg), correct?
>> Now I send an udp message (by connecting over the forwarded port with
>> enet), and get this output:
>> Received: 52 = 41
>> than I run it again, and get this output:
>> Received: 52 = 43
>> Why is the length of msg not equal to 52?
>> And why is it different from run to run?
>> enet is unable to connect over this forward, by the way.
>> Beginners mailing list
>> Beginners at haskell.org
> Beginners mailing list
> Beginners at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners