      - parameter withTag: The tag given when calling the `readData` method.
      - parameter from:    The socket where the data is read from.
      */
-    open func didReadData(_ data: Data, withTag tag: Int, from: RawTCPSocketProtocol) {
-        observer?.signal(.readData(data, tag: tag, on: self))
+    open func didRead(data: Data, from: RawTCPSocketProtocol) {
+        observer?.signal(.readData(data, on: self))
     }
 
     /**
      The socket did send some data.
 
      - parameter data:    The data which have been sent to remote (acknowledged). Note this may not be available since the data may be released to save memory.
-     - parameter withTag: The tag given when calling the `writeData` method.
      - parameter from:    The socket where the data is sent out.
      */
-    open func didWriteData(_ data: Data?, withTag tag: Int, from: RawTCPSocketProtocol) {
-        observer?.signal(.wroteData(data, tag: tag, on: self))
+    open func didWrite(data: Data?, by: RawTCPSocketProtocol) {
+        observer?.signal(.wroteData(data, on: self))
     }
 
     /**


     - parameter socket: The connected socket.
     */
    open func didConnect(_ socket: RawTCPSocketProtocol) {

    }


    }

    /**
     Response to the `AdapterSocket` on the other side of the `Tunnel` which has succefully connected to the remote server.

     - parameter adapter: The `AdapterSocket`.
     */
    open func respondTo(adapter: AdapterSocket) {
        observer?.signal(.askedToResponseTo(adapter, on: self))
    }

    /**
     Read data from the socket.
     - warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
     */
    open func readData() {
        socket.readData()
    }

    /**
     Send data to remote.

     - parameter data: Data to send.
     - warning: This should only be called after the last write is finished, i.e., `delegate?.didWriteData()` is called.
     */
    open func write(data: Data) {
        socket.write(data: data)
    }

    /**
