<html>
  <head>
    
  </head>
  <body bgcolor="#CCCCCC" text="#000000">
    Your code works for me.<br>
    <br>
    I realize that I was mixing my metaphors up.  I am receiving a
    message that I was assuming would fit inside one packet, and what I
    was wanting to write was code that assumed this, blocked until
    input, and once input came in, read the entirety of it, no matter
    how large, into something I could use.  The CLHS example for
    read-sequence successfully reads into an array less data than the
    size of the array allocated.  this lead me to suspect that I could
    do the same thing with a ccl socket stream, but it seems that
    read-sequence won't come back until the array is completely filled. 
    So if I want to issue a message and expect a variable length
    response, I can't make the assumption that the entire response will
    arrive inside one packet (even though I'm pretty sure that this is
    the case, as I'm in control of all of the hardware that sits between
    me and the device in question, and I will never receive a response
    larger than say 100 bytes.  I was making that assumption, and also
    the assumption that read-sequence would encounter eof when there was
    no more data to be read.<br>
    <br>
    It seems that the correct approach is to walk through the input a
    byte at a time and look for the end of message byte specified by the
    protocol I'm using, and if I stop reading before I get to the end of
    input I know I need to take what comes next and append it to what
    I've collected so far (or leave the buffer alone until I can read a
    full message out)  This last activity I've done before in other
    languages,  I should take some time to figure out how this same kind
    of work would be done in CL.<br>
    <br>
    For posterity, the code that does what I want is here: 
    <a class="moz-txt-link-freetext" href="http://paste.lisp.org/+2YMI">http://paste.lisp.org/+2YMI</a><br>
    <br>
    Thanks,<br>
    Josh<br>
    <div class="moz-cite-prefix">On 7/24/13 6:31 AM, Gary Byers wrote:<br>
    </div>
    <blockquote cite="mid:alpine.BSF.2.00.1307240419040.16507@abq.clozure.com" type="cite">Here's a very simple test case that tries to do
      something similar to
      <br>
      what your code is apparently trying to do.
      <br>
      ;---
      <br>
      (defun server ()
      <br>
        (let* ((lsock (make-socket :connect :passive :local-host
      "localhost" :local-port 40000 :reuse-address t))
      <br>
               (data (make-array 10 :element-type '(unsigned-byte 8))))
      <br>
          (dotimes (i 10) (setf (aref data i) i))
      <br>
          (let* ((stream (accept-connection lsock :wait t)))
      <br>
            (write-sequence data stream)
      <br>
            (when t
      <br>
              (sleep 5)
      <br>
              (write-sequence data stream))
      <br>
            (close stream)
      <br>
            (close lsock))))
      <br>
      <br>
      <br>
      (defun test ()
      <br>
        (process-run-function "server" #'server)
      <br>
        (let* ((stream (make-socket :remote-host "localhost"
      :remote-port 40000))
      <br>
               (data (make-array 19 :element-type '(unsigned-byte 8)))
      <br>
               (n (read-sequence data stream)))
      <br>
          (close stream)
      <br>
          (format t "~& requested 19 octets, got ~d" n)))
      <br>
      ;---
      <br>
      <br>
      Calling (TEST) shoud pause for ~5 seconds, then report that it
      requested
      <br>
      and go 19 octets.  Does this fail for you ?  If not, how does the
      code
      <br>
      that you're dealing with differ ?
      <br>
      <br>
      If you change the WHEN T in #'SERVER to WHEN NIL (and wait a few
      minutes,
      <br>
      since I'm likely not using :reuse-address correctly), the server
      will close
      <br>
      its side of the connection after writing 10 octets; READ-SEQUENCE
      will see
      <br>
      that the stream is at EOF after those 10 octets are read.  This
      (EOF) is the
      <br>
      only situation in which READ-SEQUENCE should return prematurely,
      and it's the
      <br>
      only situation I'm aware of in which it does so in CCL.
      <br>
      <br>
      <br>
      On Tue, 23 Jul 2013, Joshua Kordani wrote:
      <br>
      <br>
      <blockquote type="cite">Greetings all.
        <br>
        <br>
        I am attempting to read all currently available data from a
        stream.? I am
        <br>
        not expecting much data, so I suspect I need to call
        finish-output.? (read)
        <br>
        seems to return immediately, before it seems that data is
        available.? I
        <br>
        guess in hindsight I don't know how the implementation is
        supposed to know
        <br>
        when input has stopped coming in on what is conceptually a
        stream with no
        <br>
        eof representing any termination of input.
        <br>
        <br>
        I guess what I'm saying is, given a socket stream, is there a
        way to read,
        <br>
        blocking until there is input to be read and until there is no
        more data to
        <br>
        be read, this kind of stream?
        <br>
        <br>
        <a class="moz-txt-link-freetext" href="http://paste.lisp.org/+2YLT">http://paste.lisp.org/+2YLT</a>
        <br>
        this is a paste of the funciton I'm trying to get working.? I
        want to write
        <br>
        something to the stream, and I expect something back, which I
        want to either
        <br>
        return from this function or simply emit to *terminal-io*
        <br>
        <br>
        Josh
        <br>
        <br>
        <br>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>