Я написал простой многоадресный сервер udp с использованием QUdpSocket, но функция writedatagram работает только в том случае, если я запускаю приложение с привилегиями root. Это нормально? Это боль. Плюс iperf (например), похоже, работает без привилегий root. Что я делаю не так?qudpsocket многоадресные корневые привилегии
Платформа Ubuntu 12,04 3.2.0-56-родовой x86_64 Мои коды очень просто ...
#define MULTICAST_ADDR "192.168.1.255"
#define MULTICAST_PORT 45454
udpSocket = new QUdpSocket();
udpSocket->setSocketOption(QAbstractSocket::MulticastTtlOption,1);
udpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,0);
x = udpSocket->writeDatagram(ba->data()+sent,
toSend,
QHostAddress(MULTICAST_ADDR),
MULTICAST_PORT);
Этот код основан на QTs собственный пример кода, который не имеет никакого упоминания корневых привилегий.
Если я просто изменяю IP-адрес на адрес широковещательной/многоадресной рассылки (например, 192.168.1.18), мне не нужны права root.