public function createServer($address, $context = array())
    {
        $that = $this;
        $factory = $this->rawFactory;

        return $this->resolve($address)->then(function ($address) use ($factory, $that, $context){
            $scheme = 'udp';
            $socket = $factory->createFromString($address, $scheme);
            if ($socket->getType() !== SOCK_DGRAM) {
                $socket->close();
                throw new Exception('Not a datagram address scheme');
            }

            if (isset($context['broadcast']) && $context['broadcast']) {
                $socket->setOption(SOL_SOCKET, SO_BROADCAST, 1);
            }

            $socket->setBlocking(false);
            $socket->bind($address);

            return $that->createFromRaw($socket);
        });
    }