Возможно ли для сокета UDP (SOCK_DGRAM) получить доступ к полю контрольной суммы из входящего пакета UDP и проверить наличие ошибок? Я знаю, что мы можем сделать это с помощью необработанных сокетов (SOCK_RAW), но я хочу знать, можем ли мы сделать это с помощью сокетов дейтаграмм. Если так, как мы можем сделать это в C?
Если вы создаете обычный сокет UDP, у вас нет доступа к заголовку UDP и, следовательно, к контрольной сумме. Но ядро уже отбрасывает пакеты, в которых контрольная сумма неверна, поэтому вы все равно не увидите эти пакеты.
Вы не можете сделать это с помощью сокетов дейтаграмм (SOCK_DGRAM), потому что стек TCP / IP удаляет эти байты заголовка UDP из полученного буфера перед передачей его в API более высокого уровня. Вам нужно использовать необработанные сокеты (SOCK_RAW), чтобы эти байты были сохранены.