[slime-devel] Problems with slime using sbcl on winXP (emacsW32)

Thomas Karolski thomas.karolski at googlemail.com
Sat Dec 6 16:11:50 UTC 2008

Helmut Eller schrieb:
> For example with:
> (read-char-no-hang
>  (let ((socket (make-instance 'sb-bsd-sockets:inet-socket
> 			      :type :stream :protocol :tcp)))
>    (setf (sb-bsd-sockets:sockopt-reuse-address socket) t)
>    (sb-bsd-sockets:socket-bind socket #(0 0 0 0) 5000)
>    (sb-bsd-sockets:socket-listen socket 5)
>    (unwind-protect
> 	(sb-bsd-sockets:socket-make-stream 
> 	 (sb-bsd-sockets:socket-accept socket)
> 	 :output t :input t :element-type 'character)
>      (sb-bsd-sockets:socket-close socket))))
> This creates a socket, waits for someone to connect, and calls
> read-char-no-hang on the new stream.
> Start this in SBCL and execute  "telnet localhost 5000"
> in a shell.  read-char-no-hang should return nil as soon
> as the telnet client connects.  
> If it just waits, then you can type something into the telnet window and
> the first char should appear on the SBCL side.  In this case
> read-char-no-hang doesn't work properly, it works like the ordinary
> read-char.
You're right, it does not return nil as soon as someone connects. It 
does however return the first char as soon as I type something into the 
first window.
> The best solution would be to fix HANDLE-LISTEN, but I don't know how to
> do that.
> As a workaround you can probably replace
>     (wait-for-event `(:sldb-return ,(1+ level)) t) ; clean event-queue
> in sldb-loop with:
>     (poll-for-event `(:sldb-return ,(1+ level))
That actually solved the problem!
Now given that the problem seems to be with sbcl's HANDLE-LISTEN, I 
guess I'll check out their mailing list.

Many thanks there,
Thomas K.

More information about the slime-devel mailing list