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 | Yes: through FFI | Yes |
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()).
Last modified 13 years ago
Last modified on 08/01/08 21:55:46