Exemplo n.º 1
0
 /** {@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 [];
     }
 }
Exemplo n.º 2
0
 /**
  * Remove given descriptor from selector
  *
  * @param RequestDescriptor $operation
  *
  * @return void
  */
 private function removeOperationsFromSelector(RequestDescriptor $operation)
 {
     if ($this->selector) {
         $this->selector->removeAllSocketOperations($operation);
     }
 }