     public var errorHandler: (ErrorType -> Void)? = loggingErrorHandler
 
     private var resumed: Bool = false
-    private var queue: dispatch_queue_t!
+    private var receiveQueue: dispatch_queue_t!
+    private var sendQueue: dispatch_queue_t!
     private var source: dispatch_source_t!
     private var socket: Int32!
 

            Darwin.close(socket)
        }
        self.socket = nil
        self.queue = nil
        self.source = nil
    }
}

    }

    public func send(data: DispatchData <Void>, address: Address! = nil, port: UInt16, writeHandler: ((Bool,Error?) -> Void)? = loggingWriteHandler) throws {
        precondition(receiveQueue != nil, "Cannot send data without a queue")
        precondition(resumed == true, "Cannot send data on unresumed queue")

        dispatch_async(sendQueue) {

            [weak self] in
            guard let strong_self = self else {
