@ регулировка ..
На самом деле, я только что понял. Когда я устанавливаю SO_BROADCAST
, я получаю 92 (пакет не установлен)
Какой пакет я должен установить, тогда?
Редактировать: Ядро версии 2.6.18, и вы правы! 92 - это ENOPROTOOPT
//Socket creation
sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
//Broadcasting
int broadcast = 1;
int err;
if( (err = sock->ops->setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&broadcast, sizeof broadcast)) < 0 )
{
printk(KERN_ALERT MODULE_NAME ": Could not configure broadcast, error %d\n", err);
return -1;
}
Редактировать: Я получил это из setsockopt
справочная страница ...
ENOPROTOOPT
Опция неизвестна на указанном уровне.
... Итак, я полагаю, что SOL_SOCKET
не является правильным значением для передачи. Я также попробовал IPPROTO_UDP
вместо SOL_SOCKET
без удачи.
Редактировать: http://docs.hp.com/en/32650-90372/ch02s10.html говорит, что SO_BROADCAST
является опцией уровня SOL_SOCKET
, но я продолжаю получать -92
Редактировать: Я в отчаянии, поэтому я попробовал SOL_UDP
, все еще -92.
Да, это весело :) ... Хорошая синергия! В конце (надеюсь, мы скоро туда доберемся) давайте соберем окончательный ответ, чистый и приятный! :)
Редактировать: Даже если жестко установить флаг вещания, sock_sendmsg
не удастся (-13, «Отказано в доступе»)
sock->sk->sk_flags |= SO_BROADCAST;
Мне действительно нужна помощь в этом ..