Skip to content

Commit 4158f1e

Browse files
authored
Merge pull request #222 from AK-Eyes/patch-2
fixed String_IO error for read_until
2 parents e2b45cd + 6aea9ee commit 4158f1e

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

Exscript/protocols/telnetlib.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
import time
7171
import socket
7272
import select
73+
import selectors
74+
from time import monotonic as _time
7375
import struct
7476
from io import StringIO
7577

@@ -155,6 +157,12 @@
155157

156158
SEND_TTYPE = chr(1).encode('latin-1')
157159

160+
# poll/select have the advantage of not requiring any extra file descriptor,
161+
# contrarily to epoll/kqueue (also, they require a single syscall).
162+
if hasattr(selectors, 'PollSelector'):
163+
_TelnetSelector = selectors.PollSelector
164+
else:
165+
_TelnetSelector = selectors.SelectSelector
158166

159167
class Telnet(object):
160168

@@ -322,26 +330,26 @@ def read_until(self, match, timeout=None):
322330
"""
323331
n = len(match)
324332
self.process_rawq()
325-
i = self.cookedq.find(match)
333+
i = self.rawq.find(match)
326334
if i >= 0:
327335
i = i+n
328-
buf = self.cookedq[:i]
329-
self.cookedq = self.cookedq[i:]
336+
buf = self.rawq[:i]
337+
self.rawq = self.rawq[i:]
330338
return buf
331339
if timeout is not None:
332340
deadline = _time() + timeout
333341
with _TelnetSelector() as selector:
334342
selector.register(self, selectors.EVENT_READ)
335343
while not self.eof:
336344
if selector.select(timeout):
337-
i = max(0, len(self.cookedq)-n)
345+
i = max(0, len(self.rawq)-n)
338346
self.fill_rawq()
339347
self.process_rawq()
340-
i = self.cookedq.find(match, i)
348+
i = self.rawq.find(match, i)
341349
if i >= 0:
342350
i = i+n
343-
buf = self.cookedq[:i]
344-
self.cookedq = self.cookedq[i:]
351+
buf = self.rawq[:i]
352+
self.rawq = self.rawq[i:]
345353
return buf
346354
if timeout is not None:
347355
timeout = deadline - _time()

0 commit comments

Comments
 (0)