diff options
Diffstat (limited to 'bindings')
-rw-r--r-- | bindings/cl/zeromq-api.lisp | 12 | ||||
-rw-r--r-- | bindings/cl/zeromq.lisp | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/bindings/cl/zeromq-api.lisp b/bindings/cl/zeromq-api.lisp index 188bdd4..44d725b 100644 --- a/bindings/cl/zeromq-api.lisp +++ b/bindings/cl/zeromq-api.lisp @@ -146,7 +146,7 @@ The string must be freed with FOREIGN-STRING-FREE." (setf (mem-aref int :long 0) value) (%setsockopt socket option int (foreign-type-size :long)))))) -(defun poll (items) +(defun poll (items &optional (timeout -1)) (let ((len (length items))) (with-foreign-object (%items 'pollitem len) (dotimes (i len) @@ -156,14 +156,16 @@ The string must be freed with FOREIGN-STRING-FREE." (setf socket (pollitem-socket item) fd (pollitem-fd item) events (pollitem-events item))))) - (let ((ret (%poll %items len))) - (if (> ret 0) + (let ((ret (%poll %items len timeout))) + (cond + ((zerop ret) nil) + ((> ret 0) (loop for i below len for revent = (foreign-slot-value (mem-aref %items 'pollitem i) 'pollitem 'revents) - collect (setf (pollitem-revents (nth i items)) revent)) - (error (convert-from-foreign (%strerror *errno*) :string))))))) + collect (setf (pollitem-revents (nth i items)) revent))) + (t (error (convert-from-foreign (%strerror *errno*) :string)))))))) (defmacro with-polls (list &body body) `(let ,(loop for (name . polls) in list diff --git a/bindings/cl/zeromq.lisp b/bindings/cl/zeromq.lisp index 90b42da..217b97c 100644 --- a/bindings/cl/zeromq.lisp +++ b/bindings/cl/zeromq.lisp @@ -231,7 +231,8 @@ (defcfun ("zmq_poll" %poll) :int (items :pointer) - (nitems :int)) + (nitems :int) + (timeout :long)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Helper functions. |