@@ -528,14 +528,13 @@ I/O Base Classes
528528 It inherits from :class: `IOBase `.
529529
530530 The main difference with :class: `RawIOBase ` is that methods :meth: `read `,
531- :meth: `readinto ` and :meth: `write ` will try (respectively) to read as much
532- input as requested or to consume all given output, at the expense of
533- making perhaps more than one system call.
531+ :meth: `readinto ` and :meth: `write ` will try (respectively) to read
532+ as much input as requested or to emit all provided data.
534533
535- In addition, those methods can raise :exc: ` BlockingIOError ` if the
536- underlying raw stream is in non-blocking mode and cannot take or give
537- enough data; unlike their :class: ` RawIOBase ` counterparts, they will
538- never return ``None ``.
534+ In addition, if the underlying raw stream is in non-blocking mode, when the
535+ system returns would block :meth: ` write ` will raise :exc: ` BlockingIOError `
536+ with :attr: ` BlockingIOError.characters_written ` and :meth: ` read ` will return
537+ data read so far or ``None `` if no data is available .
539538
540539 Besides, the :meth: `read ` method does not have a default
541540 implementation that defers to :meth: `readinto `.
@@ -568,29 +567,40 @@ I/O Base Classes
568567
569568 .. method :: read(size=-1, /)
570569
571- Read and return up to *size * bytes. If the argument is omitted, ``None ``,
572- or negative, data is read and returned until EOF is reached. An empty
573- :class: `bytes ` object is returned if the stream is already at EOF.
570+ Read and return up to *size * bytes. If the argument is omitted, ``None ``,
571+ or negative read as much as possible.
574572
575- If the argument is positive, and the underlying raw stream is not
576- interactive, multiple raw reads may be issued to satisfy the byte count
577- (unless EOF is reached first). But for interactive raw streams, at most
578- one raw read will be issued, and a short result does not imply that EOF is
579- imminent.
573+ Fewer bytes may be returned than requested. An empty :class: ` bytes ` object
574+ is returned if the stream is already at EOF. More than one read may be
575+ made and calls may be retried if specific errors are encountered, see
576+ :meth: ` os. read` and :pep: ` 475 ` for more details. Less than size bytes
577+ being returned does not imply that EOF is imminent.
580578
581- A :exc: `BlockingIOError ` is raised if the underlying raw stream is in
582- non blocking-mode, and has no data available at the moment.
579+ When reading as much as possible the default implementation will use
580+ ``raw.readall `` if available (which should implement
581+ :meth: `RawIOBase.readall `), otherwise will read in a loop until read
582+ returns ``None ``, an empty :class: `bytes `, or a non-retryable error. For
583+ most streams this is to EOF, but for non-blocking streams more data may
584+ become available.
585+
586+ .. note ::
587+
588+ When the underlying raw stream is non-blocking, implementations may
589+ either raise :exc: `BlockingIOError ` or return ``None `` if no data is
590+ available. :mod: `io ` implementations return ``None ``.
583591
584592 .. method :: read1(size=-1, /)
585593
586- Read and return up to *size * bytes, with at most one call to the
587- underlying raw stream's :meth: `~RawIOBase.read ` (or
588- :meth: `~RawIOBase.readinto `) method. This can be useful if you are
589- implementing your own buffering on top of a :class: `BufferedIOBase `
590- object.
594+ Read and return up to *size * bytes, calling :meth: `~RawIOBase.readinto `
595+ which may retry if :py:const: `~errno.EINTR ` is encountered per
596+ :pep: `475 `. If *size * is ``-1 `` or not provided, the implementation will
597+ choose an arbitrary value for *size *.
591598
592- If *size * is ``-1 `` (the default), an arbitrary number of bytes are
593- returned (more than zero unless EOF is reached).
599+ .. note ::
600+
601+ When the underlying raw stream is non-blocking, implementations may
602+ either raise :exc: `BlockingIOError ` or return ``None `` if no data is
603+ available. :mod: `io ` implementations return ``None ``.
594604
595605 .. method :: readinto(b, /)
596606
@@ -767,34 +777,21 @@ than raw I/O does.
767777
768778 .. method :: peek(size=0, /)
769779
770- Return bytes from the stream without advancing the position. At most one
771- single read on the raw stream is done to satisfy the call. The number of
772- bytes returned may be less or more than requested .
780+ Return bytes from the stream without advancing the position. The number of
781+ bytes returned may be less or more than requested. If the underlying raw
782+ stream is non-blocking and the operation would block, returns empty bytes .
773783
774784 .. method :: read(size=-1, /)
775785
776- Read and return *size * bytes, or if *size * is not given or negative, until
777- EOF or if the read call would block in non-blocking mode.
778-
779- .. note ::
780-
781- When the underlying raw stream is non-blocking, a :exc: `BlockingIOError `
782- may be raised if a read operation cannot be completed immediately.
786+ In :class: `BufferedReader ` this is the same as :meth: `io.BufferedIOBase.read `
783787
784788 .. method :: read1(size=-1, /)
785789
786- Read and return up to *size * bytes with only one call on the raw stream.
787- If at least one byte is buffered, only buffered bytes are returned.
788- Otherwise, one raw stream read call is made.
790+ In :class: `BufferedReader ` this is the same as :meth: `io.BufferedIOBase.read1 `
789791
790792 .. versionchanged :: 3.7
791793 The *size * argument is now optional.
792794
793- .. note ::
794-
795- When the underlying raw stream is non-blocking, a :exc: `BlockingIOError `
796- may be raised if a read operation cannot be completed immediately.
797-
798795.. class :: BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE)
799796
800797 A buffered binary stream providing higher-level access to a writeable, non
@@ -826,8 +823,8 @@ than raw I/O does.
826823
827824 Write the :term: `bytes-like object `, *b *, and return the
828825 number of bytes written. When in non-blocking mode, a
829- :exc: `BlockingIOError ` is raised if the buffer needs to be written out but
830- the raw stream blocks.
826+ :exc: `BlockingIOError ` with :attr: ` BlockingIOError.characters_written ` set
827+ is raised if the buffer needs to be written out but the raw stream blocks.
831828
832829
833830.. class :: BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)
0 commit comments