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


Reply via email to