On 2013-04-17, at 2:55 AM, Chun Tian (binghe) wrote:
> I think it's reasonable to export more interfaces for WAIT-FOR-INPUT to make
> it more efficiency for advanced users, but some of exist symbols (i.e. STATE)
> may be too simple that it could be conflict with other packages or user
> application, therefore I'm thinking a prefix WFI- or just WAIT- for all these
> potential new exports. Do you have any suggestion?
To me, I think the most reasonable would be to export WAIT-LIST-WAITERS and a
SOCKET-READABLE-P function that returns whether the state is :READ or not. Of
course, it wouldn't be obvious that one has to WAIT-FOR-INPUT to make sure the
SOCKET-READABLE-P is up-to-date. Another approach might be to have
WAIT-FOR-INPUT take a function to call on the readable sockets. This would
discourage anyone from disassociating the WAIT-FOR-INPUT and the READABLE state.
(labels ((handle-socket-input (socket)
… do something …))
(wait-for-input my-wait-list :timeout 0 :ready-func #'handle-socket-input))
and inside WAIT-FOR-INPUT:
(when ready-func
(dolist (sock (wait-list-waiters socket-or-sockets))
(when (eq (state sock) :read)
(funcall ready-func sock)))
I could go either way….
I just noticed that each USOCKET instance tracks which WAIT-LIST (if any) it is
part of. I wasn't expecting that. I was expecting to be able to keep several
WAIT-LISTs around (which may overlap) and use different ones at different
times. Hmmm. Of course, with a quick look, I'm not seeing how it's being used
on the front-end in any way except in ADD-WAITER, REMOVE-WAITER, and
REMOVE-ALL-WAITERS. Maybe it's used on the backend? I'll have to look closer.
Anyhow, you asked in the thread with Faré's patch if anyone would like to
co-maintain. I'm pretty busy myself, but I wouldn't mind helping out. USOCKET
is one of my favorite libs out there.
Thanks,
Patrick