class_docstr: Interface for stream protocol with manual buffer control.
  
  Event methods, such as `create_server` and `create_connection`,
  accept factories that return protocols that implement this interface.
  
  The idea of BufferedProtocol is that it allows to manually allocate
  and control the receive buffer.  Event loops can then use the buffer
  provided by the protocol to avoid unnecessary data copies.  This
  can result in noticeable performance improvement for protocols that
  receive big amounts of data.  Sophisticated protocols can allocate
  the buffer only once at creation time.
  
  State machine of calls:
  
    start -> CM [-> GB [-> BU?]]* [-> ER?] -> CL -> end
  
  * CM: connection_made()
  * GB: get_buffer()
  * BU: buffer_updated()
  * ER: eof_received()
  * CL: connection_lost()
class_docstr_tok: ["Interface","for","stream","protocol","with","manual","buffer","control",".","Event","methods",",","such","as","`","create_server","`","and","`","create_connection","`",",","accept","factories","that","return","protocols","that","implement","this","interface",".","The","idea","of","BufferedProtocol","is","that","it","allows","to","manually","allocate","and","control","the","receive","buffer",".","Event","loops","can","then","use","the","buffer","provided","by","the","protocol","to","avoid","unnecessary","data","copies",".","This","can","result","in","noticeable","performance","improvement","for","protocols","that","receive","big","amounts","of","data",".","Sophisticated","protocols","can","allocate","the","buffer","only","once","at","creation","time",".","State","machine","of","calls",":","start","-",">","CM","[","-",">","GB","[","-",">","BU","?","]","]","*","[","-",">","ER","?","]","-",">","CL","-",">","end","*","CM",":","connection_made","(",")","*","GB",":","get_buffer","(",")","*","BU",":","buffer_updated","(",")","*","ER",":","eof_received","(",")","*","CL",":","connection_lost","(",")"]
docstr: Called when the other end calls write_eof() or equivalent.
  
  If this returns a false value (including None), the transport
  will close itself.  If it returns a true value, closing the
  transport is up to the protocol.
docstr_tok: ["Called","when","the","other","end","calls","write_eof","(",")","or","equivalent",".","If","this","returns","a","false","value","(","including","None",")",",","the","transport","will","close","itself",".","If","it","returns","a","true","value",",","closing","the","transport","is","up","to","the","protocol","."]
code: def eof_received(self):
      """Called when the other end calls write_eof() or equivalent.
  
      If this returns a false value (including None), the transport
      will close itself.  If it returns a true value, closing the
      transport is up to the protocol.
      """
  
label_desc: Use image node_id 3 for calling the BufferedProtocol obj's underlying member method code with example usage: obj.eof_received() without return types