public function __invoke(ServiceManagerInterface $serviceManager, array $moreParams = [])
 {
     $host = $moreParams[0];
     if (filter_var($host, FILTER_VALIDATE_IP | FILTER_FLAG_IPV6)) {
         return $serviceManager->get('UdpIp6Socket', $moreParams);
     }
     return $serviceManager->get('UdpIp4Socket', $moreParams);
 }
 public function __invoke(ServiceManagerInterface $serviceManager, array $moreParams = [])
 {
     if (!isset($moreParams['buffer'])) {
         throw new Exception\UnexpectedValueException('Could not parse request.');
     }
     /** @var RequestParser $requestParser */
     $requestParser = $serviceManager->get('RequestParser');
     /** @var Request $request */
     $request = null;
     $requestParser->on(['state'], function (Event $event, $method, $path, $version) use(&$request) {
         $request = Request::create($path, $method);
         $event->getEventEmitter()->on(['header'], function (Event $e, $headerName, $headerValue) use($request) {
             /** @var Request $request */
             $name = \str_replace('-', '_', \strtoupper($headerName));
             if ($name === 'COOKIE') {
                 $cookieData = [];
                 parse_str($headerValue, $cookieData);
                 $request->setCookieParams(new ArrayObject($cookieData));
             } else {
                 $request->setHeader($name, $headerValue);
             }
         });
         $event->getEventEmitter()->on(['body'], function (Event $e, $body) use($request) {
             /** @var Request $request */
             if (!in_array($request->getMethod(), ['GET', 'HEAD']) && !empty($body)) {
                 $postData = [];
                 parse_str($body, $postData);
                 $request->setPostParams(new ArrayObject($postData));
             }
         });
     });
     $requestParser->parse($moreParams['buffer']);
     return $request;
 }