summaryrefslogtreecommitdiff
path: root/bindings/cl/zeromq-api.lisp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2010-01-13 13:35:13 +0100
committerMartin Sustrik <sustrik@fastmq.commkdir>2010-01-13 13:35:13 +0100
commit30a107e06d48ebbc7a635ba4fb21a24e385cf4e4 (patch)
tree65d3eb5b56a7c18088b5105b1ddf529a312730e8 /bindings/cl/zeromq-api.lisp
parent20a8edcf5c2d9d5099d194e5a87c501d49c47328 (diff)
timeout parameter for zmq_poll added in cl binding
Diffstat (limited to 'bindings/cl/zeromq-api.lisp')
-rw-r--r--bindings/cl/zeromq-api.lisp12
1 files changed, 7 insertions, 5 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