What did you (MA) mean by "hangs"? If
read-sequence/
usocket-stream is built upon or named to resemble READ-SEQUENCE, isn't it just fulfilling its contract? As described in the ANS, R-S never returns normally until it has read and modified the entire sequence (modified by :START/:END) unless end of file occurs. Perhaps READ-SEQUENCE is not the correct API for what you need for your communication channel, since the contract of R-S is inappropriate upon which to build a variable-record-length protocol.
Several previous comments were obviously constructed on top of this understanding about READ-SEQUENCE, but I didn't see any that made explicit this important point. During the X3J13 process the committee realized that the ancient Lisp I/O functions, which might have been fine for single-char teletype support, would need bulk functions in the language or else each implementation would have to invent its own (which is eventually how it worked out). READ- and WRITE-SEQUENCE were added as the place in the language to hang these things, trusting on mythological implementation competition forces to work out the details, but obviously it wasn't well thought out. As explained at the start of my message, R-S is both over- and under-defined to be the base for efficient communication protocols, modern circa the 1990's.