From: Chun T. (binghe) <bin...@gm...> - 2011-08-07 22:10:56
|
Hi, Robert Thank you for pointing out this issue. But I'm not sure if it's appropriate to change the default value of :serve-event in all cases, there should be a reason it's setting to T by default. I want to forward your mail to SBCL mailing list and see if any others have opinions. I doubt your proposal change may break other usocket-based networking applications on SBCL. (And I want to know how other Lisps handle this) Regards, Chun Tian (binghe) 在 2011-8-4,05:58, Robert Brown 写道: > I use SBCL on Linux and have noticed a problem when writing > lots of data to socket streams created with usocket. > > In file backend/sbcl.lisp, the function socket-connect creates a > stream as follows: > > (setf (socket-stream usocket) > (sb-bsd-sockets:socket-make-stream socket > :input t > :output t > :buffering :full > > :element-type element-type)) > > If you look at the code for sb-bsd-sockets:socket-make-stream in > sbcl/contrib/sb-bsd-sockets/sockets.lisp, you'll see that it specifies > a default value of T for the keyword argument serve-events: > > (defmethod socket-make-stream ((socket socket) > &key input output > (element-type 'character) > (buffering :full) > (external-format :default) > timeout > auto-close > (serve-events t)) > > This means that SBCL streams created by usocket have a true > serve-events property. When writing large amounts of data to several > streams, the kernel will eventually stop accepting data from SBCL. > When this happens, SBCL either waits for I/O to be possible on > the file descriptor it's writing to or queues the data to be flushed later. > Because usocket streams specify serve-events as true, SBCL > always queues. Instead, it should wait for I/O to be available and > write the remaining data to the socket. That's what serve-events > equal to NIL gets you. > > Usocket should add > > :serve-events NIL > > to the call to socket-make-stream. > > bob > > _______________________________________________ > usocket-devel mailing list > uso...@co... > http://lists.common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel |