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

                try self.connectedPeripheral(peripheral)
            }
            
            // store semaphore
            let semaphore = Semaphore(timeout: timeout, operation: .discoverServices(peripheral))
            accessQueue.sync { [unowned self] in self.internalState.discoverServices.semaphore = semaphore }

                try self.connectedPeripheral(peripheral)
            }
            
            guard corePeripheral.state == .connected
                else { throw CentralError.disconnected(peripheral) }
            
            let coreService = try corePeripheral.service(service)
            
            let coreCharacteristic = try coreService.characteristic(characteristic)
