@@ -65,7 +65,8 @@ def __init__(self, loop, protocol, serial_instance):
6565
6666 # Asynchronous I/O requires non-blocking devices
6767 self ._serial .timeout = 0
68- self ._serial .write_timeout = 0
68+ if not self .serial .port .startswith ("rfc2217" ):
69+ self ._serial .write_timeout = 0
6970
7071 # These two callbacks will be enqueued in a FIFO queue by asyncio
7172 loop .call_soon (protocol .connection_made , self )
@@ -284,60 +285,52 @@ def _write_ready(self):
284285 self ._maybe_resume_protocol ()
285286 assert self ._has_writer
286287
287- if os .name == "nt" :
288- def _poll_read (self ):
289- if self ._has_reader and not self ._closing :
290- try :
291- self ._has_reader = self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
292- if self .serial .in_waiting :
293- self ._read_ready ()
294- except serial .SerialException as exc :
295- self ._fatal_error (exc , 'Fatal write error on serial transport' )
296-
297- def _ensure_reader (self ):
298- if not self ._has_reader and not self ._closing :
288+ def _poll_read (self ):
289+ if self ._has_reader and not self ._closing :
290+ try :
299291 self ._has_reader = self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
300-
301- def _remove_reader (self ):
302- if self ._has_reader :
303- self ._has_reader .cancel ()
304- self ._has_reader = False
305-
306- def _poll_write (self ):
307- if self ._has_writer and not self ._closing :
308- self ._has_writer = self ._loop .call_later (self ._poll_wait_time , self ._poll_write )
309- if self .serial .out_waiting < self ._max_out_waiting :
310- self ._write_ready ()
311-
312- def _ensure_writer (self ):
313- if not self ._has_writer and not self ._closing :
314- self ._has_writer = self ._loop .call_soon (self ._poll_write )
315-
316- def _remove_writer (self ):
317- if self ._has_writer :
318- self ._has_writer .cancel ()
319- self ._has_writer = False
320-
321- else :
322- def _ensure_reader (self ):
323- if (not self ._has_reader ) and (not self ._closing ):
292+ if self .serial .in_waiting :
293+ self ._read_ready ()
294+ except serial .SerialException as exc :
295+ self ._fatal_error (exc , 'Fatal write error on serial transport' )
296+
297+ def _ensure_reader (self ):
298+ if not self ._has_reader and not self ._closing :
299+ if os .name == "nt" or self ._serial .port .startswith ("rfc2217" ):
300+ self ._has_reader = self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
301+ else :
324302 self ._loop .add_reader (self ._serial .fileno (), self ._read_ready )
325303 self ._has_reader = True
326304
327- def _remove_reader (self ):
328- if self ._has_reader :
305+ def _remove_reader (self ):
306+ if self ._has_reader :
307+ if os .name == "nt" or self ._serial .port .startswith ("rfc2217" ):
308+ self ._has_reader .cancel ()
309+ else :
329310 self ._loop .remove_reader (self ._serial .fileno ())
330- self ._has_reader = False
311+ self ._has_reader = False
331312
332- def _ensure_writer (self ):
333- if (not self ._has_writer ) and (not self ._closing ):
334- self ._loop .add_writer (self ._serial .fileno (), self ._write_ready )
313+ def _poll_write (self ):
314+ if self ._has_writer and not self ._closing :
315+ self ._has_writer = self ._loop .call_later (self ._poll_wait_time , self ._poll_write )
316+ if not self ._serial .port .startswith ("rfc2217" ) and self .serial .out_waiting < self ._max_out_waiting :
317+ self ._write_ready ()
318+
319+ def _ensure_writer (self ):
320+ if not self ._has_writer and not self ._closing :
321+ if os .name == "nt" or self ._serial .port .startswith ("rfc2217" ):
322+ self ._has_writer = self ._loop .call_soon (self ._poll_write )
323+ else :
324+ self ._loop .add_writer (self .serial .fileno (), self ._write_ready )
335325 self ._has_writer = True
336326
337- def _remove_writer (self ):
338- if self ._has_writer :
327+ def _remove_writer (self ):
328+ if self ._has_writer :
329+ if os .name == "nt" or self ._serial .port .startswith ("rfc2217" ):
330+ self ._has_writer .cancel ()
331+ else :
339332 self ._loop .remove_writer (self ._serial .fileno ())
340- self ._has_writer = False
333+ self ._has_writer = False
341334
342335 def _set_write_buffer_limits (self , high = None , low = None ):
343336 """Ensure consistent write-buffer limits."""
0 commit comments