/** {@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 []; } }