David Lichteblau david@lichteblau.com writes:
Quoting Magnus Henoch (mange@freemail.hu):
With buffering enabled, this basically works. However, I need to process "stanzas" (Jabber term for complete elements that are children of the root element) as soon as they come in, not when the buffer is full or when the stream or the root element is closed. But when I disable buffering, I get (using CLISP from recent CVS):
Thanks for the report. I have committed a bugfix to CVS. Please test.
It works. Thanks!
It would be nice if this worked, and if additionally KLACKS:PEEK would do a non-blocking read.
I will have think about that one. Would a function similar to LISTEN also be okay, which would return T if data is available and NIL otherwise?
(Note that it would not guarantee a non-blocking read if the server has already sent some characters but not an entire event, and implementing that cleanly would be a lot more difficult to do.)
Thinking about it, it struck me that I could as well call LISTEN myself; that would work for me in almost all cases. The remaining case is when I have received some character data - CONSUME could immediately return what it has received so far, without waiting for the CHARACTERS event to end. Or could I work around that with PEEK-CHAR and READ-CHAR on the underlying stream, discarding characters until the next <, without confusing CXML?
Magnus