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