[bknr-cvs] hans changed trunk/thirdparty/drakma/request.lisp

BKNR Commits bknr at bknr.net
Thu Jul 17 16:00:11 UTC 2008


Revision: 3494
Author: hans
URL: http://bknr.net/trac/changeset/3494

Add :deadline keyword argument, available only on CCL 1.2+
U   trunk/thirdparty/drakma/request.lisp

Modified: trunk/thirdparty/drakma/request.lisp
===================================================================
--- trunk/thirdparty/drakma/request.lisp	2008-07-17 15:18:01 UTC (rev 3493)
+++ trunk/thirdparty/drakma/request.lisp	2008-07-17 16:00:11 UTC (rev 3494)
@@ -201,7 +201,9 @@
                               #+:lispworks (connection-timeout 20)
                               #+:lispworks (read-timeout 20)
                               #+(and :lispworks (not :lw-does-not-have-write-timeout))
-                              (write-timeout 20 write-timeout-provided-p))
+                              (write-timeout 20 write-timeout-provided-p)
+                              #+openmcl
+                              deadline)
   "Sends an HTTP request to a web server and returns its reply.  URI
 is where the request is sent to, and it is either a string denoting a
 uniform resource identifier or a PURI:URI object.  The scheme of URI
@@ -376,7 +378,14 @@
 arguments can also be NIL \(meaning no timeout), and they don't apply
 if an existing stream is re-used.  All timeout keyword arguments are
 only available for LispWorks, WRITE-TIMEOUT is only available for
-LispWorks 5.0 or higher."
+LispWorks 5.0 or higher.
+
+DEADLINE, a time in the future, specifies the time until which the
+request should be finished.  The DEADLINE is specified in internal
+time units (see (GET-INTERNAL-TIME-UNITS) and
+INTERNAL-TIME-UNITS-PER-SECOND).  If the server fails to respond until
+that time, a COMMUNICATION-DEADLINE-EXPIRED condition is signalled.
+DEADLINE is available on CCL 1.2 and later."
   (unless (member protocol '(:http/1.0 :http/1.1) :test #'eq)
     (error "Don't know how to handle protocol ~S." protocol))
   (setq uri (cond ((uri-p uri) (copy-uri uri))
@@ -445,7 +454,17 @@
                                                           :errorp t)
                                     #-:lispworks
                                     (usocket:socket-stream
-                                     (usocket:socket-connect host port :element-type 'octet))))
+                                     (usocket:socket-connect host port
+                                                             :element-type 'octet
+                                                             #+openmcl #+openmcl
+                                                             :deadline deadline
+                                                             :nodelay t))))
+              #+openmcl
+              (when deadline
+                ;; It is correct to set the deadline here even though it may have been initialized
+                ;; by SOCKET-CONNECT already:  The stream may have been passed in by the user and
+                ;; the user may want to adjust the deadline for every request.
+                (setf (ccl:stream-deadline http-stream) deadline))
               (when (and use-ssl
                          ;; don't attach SSL to existing streams
                          (not stream))




More information about the Bknr-cvs mailing list