Некоторые операционные системы (например, ядро Linux после 2.6.20) поддерживают второй протокол для SOCK_DGRAM, который называется UDP-Lite. Если эта функция поддерживается вашей системой, она будет включена путем предоставления IPPROTO_UDPLITE в качестве третьего аргумента вызова socket ().
Он отличается от обычного UDP тем, что позволяет применять контрольные суммы только к части дейтаграммы. (Как правило, контрольное суммирование UDP является попыткой «все или ничего».) Таким образом, протокол может быть более устойчивым к сбоям контрольной суммы из-за фрагментированной передачи, в случае, если некоторые фрагменты за пределами области контрольной суммы могут быть потеряны при передаче. До тех пор, пока фрагменты, покрывающие часть контрольной суммы, были успешно получены, как можно большая часть дейтаграммы будет доставлена приложению.
Для обратной совместимости с существующим кодом, я подозреваю (но я не могу гарантировать), что сокет вызова (AF_INET, SOCK_DGRAM, 0) будет по умолчанию возвращаться к обычному UDP, даже в системах, которые дополнительно поддерживают UDP-Lite.