summaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
Diffstat (limited to 'bindings')
-rw-r--r--bindings/cl/zeromq-api.lisp12
-rw-r--r--bindings/cl/zeromq.lisp3
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.