QUdpSocket を使用して単純な udp マルチキャスト サーバーを作成しましたが、root 権限でアプリを実行した場合にのみ writedatagram 関数が機能します。これは正常ですか?痛いです。さらに、iperf (たとえば) は root 権限がなくても機能するようです。私は何を間違っていますか?
プラットフォームは Ubuntu 12.04 です 3.2.0-56-generic 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);
このコードは、root 権限について言及していない QT 独自のサンプル コードに基づいています。
IP アドレスを非ブロードキャスト/マルチキャスト アドレス (例: 192.168.1.18) に変更するだけであれば、root 権限は必要ありません。