                 try self.connectedPeripheral(peripheral)
             }
             
+            guard corePeripheral.state == .connected
+                else { throw CentralError.disconnected(peripheral) }
+            
             let coreService = try corePeripheral.service(service)
             
             // store semaphore

            let corePeripheral = try accessQueue.sync { [unowned self] in
                try self.connectedPeripheral(peripheral)
            }
            
            let coreService = try corePeripheral.service(service)
            

            
            // attempt to connect (does not timeout)
            self.internalManager.connect(corePeripheral, options: options)
            
            // throw async error
            do { try semaphore.wait() }
            
