diff options
author | Rob Austein <sra@hactrn.net> | 2017-05-03 11:21:46 -0400 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2017-05-03 11:21:46 -0400 |
commit | bbd9c119726bcfa7995a2f68633585a08a0bdc0f (patch) | |
tree | d661e5e64fbf93bb79eb4efbb225b0568613a8a3 | |
parent | a76a684fbd33c2b90a33e9c12e7536149630d6b5 (diff) |
Tweak PySerial write_timeout setting.
-rwxr-xr-x | cryptech_muxd | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/cryptech_muxd b/cryptech_muxd index d28f758..d5de227 100755 --- a/cryptech_muxd +++ b/cryptech_muxd @@ -94,8 +94,22 @@ class SerialIOStream(tornado.iostream.BaseIOStream): Implementation of a Tornado IOStream over a PySerial device. """ + # In theory, we want zero (non-blocking mode) for both the read + # and write timeouts here so that PySerial will let Tornado handle + # all the select()/poll()/epoll()/kqueue() fun, delivering maximum + # throughput to all. In practice, this has always worked for the + # author, but another developer reports that on some (not all) + # platforms this fails consistently with Tornado reporting write + # timeout errors, presumably as the result of receiving an IOError + # or OSError exception from PySerial. For reasons we don't really + # understand, setting a PySerial write timeout on the order of + # 50-100 ms "solves" this problem. Again in theory, this will + # result in lower throughput if PySerial spends too much time + # blocking on a single serial device when Tornado could be doing + # something useful elsewhere, but such is life. + def __init__(self, device): - self.serial = serial.Serial(device, 921600, timeout = 0, write_timeout = 0) + self.serial = serial.Serial(device, 921600, timeout = 0, write_timeout = 0.1) self.serial_device = device super(SerialIOStream, self).__init__() |