         }
     }
 
-    /// Read data from the underlying socket and dispatch it to the `ChannelPipeline`
-    ///
-    /// - returns: `true` if any data was read, `false` otherwise.
-    @discardableResult fileprivate func readFromSocket() throws -> ReadResult {
-        fatalError("this must be overridden by sub class")
-    }
-
-    fileprivate enum ReadResult {
-        /// Nothing was read by the read operation.
-        case none
-
-        /// Some data was read by the read operation.
-        case some
-    }
-
-    /// Write data from the underlying socket.
-    ///
-    /// - parameters:
-    ///     - pendingWrites: `PendingWritesManager` that holds all the pending writes that may be ready to be written to the underlying socket.
-    /// - returns: `true` if any data was read, `false` otherwise.
-    fileprivate func writeToSocket(pendingWrites: PendingWritesManager) throws -> WriteResult {
-        fatalError("this must be overridden by sub class")
-    }
-
     public func channelRead0(data: NIOAny) {
         // Do nothing by default
     }

        return .writtenCompletely
    }

    override public func channelRead0(data: NIOAny) {
        assert(eventLoop.inEventLoop)


            promise?.fail(error: ChannelError.ioOnClosedChannel)
            return
        }
        bufferPendingWrite(data: data, promise: promise)
    }

    private func registerForWritable() {
