Definition of USOCKET class has the comment the %READY-P slot is reset
by SOCKET-ACCEPT function. But right now SOCKET-ACCEPT does not reset
it, hence WAIT-FOR-INPUT will not actuall wait after the first it time
it notices the readiness.

Also, SB-BSD-SOCKETS:SOCKET-ACCEPT may return NIL (if accept call
returned EWOULDBLOCK, for example), and USOCKET:SOCKET-ACCEPT will try
to use it.

Attached is a patch that fixes these two issues.


Index: backend/sbcl.lisp
===================================================================
--- backend/sbcl.lisp	(revision 562)
+++ backend/sbcl.lisp	(working copy)
@@ -284,13 +284,15 @@
 (defmethod socket-accept ((socket stream-server-usocket) &key element-type)
   (with-mapped-conditions (socket)
      (let ((sock (sb-bsd-sockets:socket-accept (socket socket))))
-       (make-stream-socket
-        :socket sock
-        :stream (sb-bsd-sockets:socket-make-stream
-                 sock
-                 :input t :output t :buffering :full
-                 :element-type (or element-type
-                                   (element-type socket)))))))
+       (setf (%ready-p socket) nil)
+       (when sock
+         (make-stream-socket
+          :socket sock
+          :stream (sb-bsd-sockets:socket-make-stream
+                   sock
+                   :input t :output t :buffering :full
+                   :element-type (or element-type
+                                     (element-type socket))))))))
 
 ;; Sockets and their associated streams are modelled as
 ;; different objects. Be sure to close the stream (which

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
usocket-devel mailing list
usocket-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel

Reply via email to