 
      - parameter length: The length of the data to read.
      - parameter timeout: Operation timeout.
-     - parameter tag:    The tag identifying the data in the callback delegate method.
-     - warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
-     */
-    func readDataToLength(_ length: Int, withTimeout timeout: Double, withTag tag: Int) {
-        socket.readData(toLength: UInt(length), withTimeout: timeout, tag: tag)
+     - warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
+     */
+    func readDataTo(length: Int, withTimeout timeout: Double) {
+        socket.readData(toLength: UInt(length), withTimeout: timeout, tag: 0)
     }
 
     /**


    // MARK: Delegate methods for GCDAsyncSocket
    open func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {
        delegate?.didWriteData(nil, withTag: tag, from: self)
    }

    open func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
        delegate?.didReadData(data, withTag: tag, from: self)
    }

    open func socketDidDisconnect(_ socket: GCDAsyncSocket, withError err: Error?) {
        delegate?.didDisconnect(self)
        delegate = nil
        socket.setDelegate(nil, delegateQueue: nil)
    }

    open func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
        if !enableTLS {
            delegate?.didConnect(self)
        }
    }

    open func socketDidSecure(_ sock: GCDAsyncSocket) {
        if enableTLS {
            delegate?.didConnect(self)
        }
    }



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

    /**
