Timo B. Hübel wrote:
On Wednesday 30 January 2008 13:32:42 you wrote:
Timo B. Hübel wrote:
On Wednesday 30 January 2008 13:03:27 you wrote:
Just don't use hGetContents in any serious code, or any program longer
than 4 lines.
What else do you suggest? I just want to read something out of the socket
without knowing it's length beforehand (my example here used ordinary
Strings, but actually I want to do it with ByteStrings).
[...]

I strongly suspect for your example you want solution 1 and hGetLine,
though. (Which works just as well with or without ByteString)

Okay, but then I have to make sure that my strings won't contain any newline characters, right? If this is the case, another question raises up: I am using Data.Binary to do the serialization of my data structures to ByteString, so does anybody know if this makes guarantees about newline characters in the resulting ByteString? Otherwise I would go for the "transmit the length of what to expect"-solution.

Fortunately there is an easy way to hide newlines.

Use "show"

That will wrap newlines as \n, as well as coping with other odd characters like NULL which might upset a C library (if you're talking to C at any point).

Then you use "read" on the far end.

Otherwise, you make your protocol more sophisticated in some way, like "messages is ended by a line which only contains '.'", which is the SMTP and, AFAICR, NNTP solution to this particular sub-problem.

Of course show/read *is* one way of making your protocol more sophisticated. It just happens to be a really easy hack, for haskell users :)

Jules
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to