A socket handle.
One of :input
, :output
, or :io
.
An element type.
A positive number or nil
.
The socket-stream
class implements a buffered stream connected to a socket. The socket handle, specified by :socket
, and the direction, specified by :direction
, must be passed for a meaningful stream to be constructed. Common Lisp input functions such as read-char
will see end-of-file
if the other end of the socket is closed. The :element-type
keyword specifies the expected element type of the stream traffic. The : read-timeout
initarg specifies the read-timeout in seconds, or is nil
, meaning there are no timeouts during reads (this is the default).
The read-timeout property is intended for use when a socket connection might hang during a call to any Common Lisp input function. The read-timeout can be set by make-instance
or by open-tcp-stream
. It can also be modified by (setf stream:stream-read-timeout)
. When read-timeout is nil
, there is no timeout during reads and the call may hang. When read-timeout is not nil
, and there is no input from the socket for more than read-timeout seconds, any reading function returns end-of-file
. The read-timeout does not limit the time inside read
, but the time between successful extractions of data from the socket. Therefore, if the reading needs several rounds it may take longer than read-timeout .
Using (setf stream:stream-read-timeout)
on the stream while it is inside a read function has undefined effects. However, the setf function can be used between calls to read functions. The read-timeout property of a stream can be read by (stream:stream-read-timeout stream)
The following makes a bidirectional stream connected to a socket specified by handle .
(make-instance 'comm:socket-stream
:socket handle
:direction :io
:element-type 'base-char)
This example creates a socket stream with a read-timeout:
(make-instance 'comm:socket-stream
:handle
handle
:direction :input
:read-timeout 42)