]> granicus.if.org Git - python/commitdiff
Patch #825417: Fix timeout processing in expect,
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 3 Jul 2006 13:01:35 +0000 (13:01 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 3 Jul 2006 13:01:35 +0000 (13:01 +0000)
read_until. Will backport to 2.4.

Lib/telnetlib.py
Misc/NEWS

index 3523037edba42fe4297d4c1fb33a814ed49d1ead..a13e85cc9863542fd520e12a9131c3157375a703 100644 (file)
@@ -311,6 +311,8 @@ class Telnet:
         s_args = s_reply
         if timeout is not None:
             s_args = s_args + (timeout,)
+            from time import time
+            time_start = time()
         while not self.eof and select.select(*s_args) == s_reply:
             i = max(0, len(self.cookedq)-n)
             self.fill_rawq()
@@ -321,6 +323,11 @@ class Telnet:
                 buf = self.cookedq[:i]
                 self.cookedq = self.cookedq[i:]
                 return buf
+            if timeout is not None:
+                elapsed = time() - time_start
+                if elapsed >= timeout:
+                    break
+                s_args = s_reply + (timeout-elapsed,)
         return self.read_very_lazy()
 
     def read_all(self):
@@ -601,6 +608,9 @@ class Telnet:
             if not hasattr(list[i], "search"):
                 if not re: import re
                 list[i] = re.compile(list[i])
+        if timeout is not None:
+            from time import time
+            time_start = time()
         while 1:
             self.process_rawq()
             for i in indices:
@@ -613,7 +623,11 @@ class Telnet:
             if self.eof:
                 break
             if timeout is not None:
-                r, w, x = select.select([self.fileno()], [], [], timeout)
+                elapsed = time() - time_start
+                if elapsed >= timeout:
+                    break
+                s_args = ([self.fileno()], [], [], timeout-elapsed)
+                r, w, x = select.select(*s_args)
                 if not r:
                     break
             self.fill_rawq()
index 4cb5cd37dc60bf21d3c30b844f91f97e5b5d8d41..11add31de4453e59eb4dbc532becd4695ef263ed 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@ Core and builtins
 Library
 -------
 
+- Bug #822974: Honor timeout in telnetlib.{expect,read_until}
+  even if some data are received.
+
 - Bug #1267547: Put proper recursive setup.py call into the
   spec file generated by bdist_rpm.