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|
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).
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()).