(setf (slot-value socket 'file-descriptor) fd
(slot-value socket 'protocol) proto-num
(slot-value socket 'type) type)
- (sb-ext:finalize socket (lambda () (sockint::close fd)))))
+ (sb-ext:finalize socket (lambda () (sockint::close fd))
+ :dont-save t)))
\f
:type (socket-type socket)
:protocol (socket-protocol socket)
:descriptor fd)))
- (sb-ext:finalize s (lambda () (sockint::close fd))))
+ (sb-ext:finalize s (lambda () (sockint::close fd))
+ :dont-save t))
(multiple-value-list (bits-of-sockaddr socket sockaddr))))))))
(defgeneric socket-connect (socket &rest address)
(buffering :full)
(external-format :default)
timeout
- auto-close)
- "Default method for SOCKET objects. An ELEMENT-TYPE of :DEFAULT will
-construct a bivalent stream. Acceptable values for BUFFERING are :FULL, :LINE
+ auto-close
+ (serve-events t))
+ "Default method for SOCKET objects.
+
+An ELEMENT-TYPE of :DEFAULT will construct a bivalent stream, capable of both
+binary and character IO. Acceptable values for BUFFERING are :FULL, :LINE
and :NONE. Streams will have no TIMEOUT by default. If AUTO-CLOSE is true, the
underlying OS socket is automatically closed after the stream and the socket
-have been garbage collected.
+have been garbage collected. If SERVE-EVENTS is true, blocking IO on the
+socket will dispatch to the recursive event loop -- the default is currently
+true, but this liable to change.
The stream for SOCKET will be cached, and a second invocation of this method
will return the same stream. This may lead to oddities if this function is
:buffering buffering
:external-format external-format
:timeout timeout
- :auto-close auto-close)))
- (setf (slot-value socket 'stream) stream)
+ :auto-close auto-close
+ :serve-events serve-events))
+ (setf (slot-value socket 'stream) stream))
(sb-ext:cancel-finalization socket)
stream))