wiki:SocketSelect
close Warning: Can't synchronize with repository "(default)" (Couldn't open Subversion repository /project/usocket/svn: SubversionException: ("Can't open file '/project/usocket/svn/format': Permission denied", 13)). Look in the Trac log for more information.

Version 8 (modified by ehuelsmann, 8 years ago) (diff)

--

Socket select() [efficient waiting] feature

Analysis of support in underlying implementations

Implementation select() poll() custom (select-like) End result
SBCL (non-Win32) Yes (out of the box) Yes (through FFI) No Yes
SBCL (Win32) No No Maybe, through FFI maybe
CLISP No No Yes (SOCKETS:STREAM-STATUS, see below) Yes
CMUCL Yes (out of the box) Yes (through FFI) No Yes
Scieneer Probably (stems from CMU) Yes (through FFI) No Yes
Allegro Yes (through FFI using socket-os-fd; different on Windows and Unix...) No (not on Windows) Yes, using mp:wait-for-input-available (input select() only) Yes
OpenMCL Yes, by using several CCL package internals It provides PROCESS-INPUT-WAIT which works on 1 handle (what good is THAT!?) Yes
LispWorks? (non-Win32) No No system:wait-for-input-streams (input only), but only on Unix Yes
LispWorks? (Win32) No No No; maybe through FFI? maybe
ECL Yes (using clines) Yes (using clines) No Yes
ArmedBear? Can depend on the Java Selectors and Channels achitecture Yes

CLISP

See http://clisp.cons.org/impnotes/socket.html#so-status.

SBCL

See sb-unix:unix-select.

CMUCL

See unix:unix-select.

LispWorks

Unfortunately system:wait-for-input-streams is only available on LispWorks 5.0 and higher. That shouldn't be a problem, since even the personal addition is available in a 5.0 version now (it used to be available in 4.4, even when 5.0 was out for paying customers for a while).

OpenMCL

The PROCESS-INPUT-WAIT routine simply hasn't been written with multiple sockets/streams in mind. Luckily, we have insight into the CCL package and write our own. (This ends up using an FFI-binding to select()).