From 30a107e06d48ebbc7a635ba4fb21a24e385cf4e4 Mon Sep 17 00:00:00 2001
From: Martin Sustrik <sustrik@fastmq.commkdir>
Date: Wed, 13 Jan 2010 13:35:13 +0100
Subject: timeout parameter for zmq_poll added in cl binding

---
 bindings/cl/zeromq-api.lisp | 12 +++++++-----
 bindings/cl/zeromq.lisp     |  3 ++-
 2 files changed, 9 insertions(+), 6 deletions(-)

(limited to 'bindings/cl')

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.
-- 
cgit v1.2.3