LINUX.ORG.RU

Хм. Этот бит на что - на область памяти, регистр процессора, или как? Детальнее опиши проблему.

И твой код - в какой области работает, user space, kernel?

Spectr ★★★
()
Ответ на: комментарий от ansky

по идее через setsockopt(), только я не нашел похожей опции...

man 7 ip -> RFC791(список всех возможных опций - но я там такого не нашел).

а вот это интереснее:

IP_PMTU_DISCOVER - Устанавливает или считывает Path MTU Discovery для сокета. Если эта опция запущена, то Linux производит Path MTU Discovery в этом сокете в соответствии с RFC1191. Флаг запрета фрагментации устанавливается для всех исходящих датаграмм.

Spectr ★★★
()

Кстати, спасибо за хороший вопрос - я щас сам добиваю UDP сервер, пакеты ручками создаю, и вспомнил, что по туннелю могут пакеты идти... и тогда будет не очень хорошо...

Так что, мне тоже это пригодится :)

Spectr ★★★
()

смотрите сами, include/net/ip.h:
int ip_dont_fragment(struct sock *sk, struct dst_entry *dst)
{
        return (inet_sk(sk)->pmtudisc == IP_PMTUDISC_DO ||
                (inet_sk(sk)->pmtudisc == IP_PMTUDISC_WANT &&
                 !(dst_metric(dst, RTAX_LOCK)&(1<<RTAX_MTU))));
}

отвечает, будет ли включен IP_DF.

однако есть SOCK_RAW и IP_HDRINCL.

idle ★★★★★
()

Я думаю, мне помогут исходники ping

int pmtudisc=-1;
...
case 'M':
   if (strcmp(optarg, "do") == 0)
     pmtudisc = IP_PMTUDISC_DO;
   else if (strcmp(optarg, "dont") == 0)
     pmtudisc = IP_PMTUDISC_DONT;
   else if (strcmp(optarg, "want") == 0)
     pmtudisc = IP_PMTUDISC_WANT;
...
if (pmtudisc < 0)
      pmtudisc = IP_PMTUDISC_DO;
...
if (pmtudisc >= 0) {
  if (setsockopt(icmp_sock, SOL_IP, IP_MTU_DISCOVER, &pmtudisc, sizeof(pmtudisc)) == -1)
...

ansky ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.