/** {@inheritdoc} */ public function processStage(array $requestDescriptors) { $this->initLastIoOperationInfo($requestDescriptors); $udpOperations = $this->findConnectionLessSockets($requestDescriptors); if ($udpOperations) { // do not perform actual select, since these requestDescriptors must be processed immediately return $udpOperations; } /** @var RequestDescriptor[] $requestDescriptors */ foreach ($requestDescriptors as $descriptor) { $this->selector->addSocketOperation($descriptor, $descriptor->getOperation()->getType()); } try { $timeout = $this->calculateSelectorTimeout($requestDescriptors); $context = $this->selector->select($timeout['sec'], $timeout['microsec']); return $this->getUniqueDescriptors(array_merge($this->markDescriptors($context->getRead(), RequestDescriptor::RDS_READ), $this->markDescriptors($context->getWrite(), RequestDescriptor::RDS_WRITE), $this->markDescriptors($context->getOob(), RequestDescriptor::RDS_OOB))); } catch (TimeoutException $e) { return []; } }
/** * Remove given descriptor from selector * * @param RequestDescriptor $operation * * @return void */ private function removeOperationsFromSelector(RequestDescriptor $operation) { if ($this->selector) { $this->selector->removeAllSocketOperations($operation); } }