@@ -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