IP не фрагментируйте бит на Mac OS - PullRequest
4 голосов
/ 11 декабря 2010

Я пишу программу передачи файлов по TCP.

Я хочу установить флаг не фрагментировать на IP

В сокете это то, что я хочу сделать:

int val = 1;
setsockopt(sd, IPPROTO_IP, IP_DONTFRAG, &val, sizeof(val));

Однако IP_DONTFRAG не доступно в Mac OS.Я что-то пропустил?или я забыл включить его правильно?

Заранее спасибо, если кто-нибудь знает

- Сэм

Ответы [ 3 ]

2 голосов
/ 11 декабря 2010
1 голос
/ 14 декабря 2010

Бит DF обычно используется для автоматического определения пути MTU (PMTU) *1002* операционной системой с TCP-соединениями.Во всяком случае, у вас может быть опция сокета для отключения обнаружения PMTU, которая никогда не будет устанавливать DF (это опция сокета IP_MTU_DISCOVER в linux).Если вы оставите обнаружение PMTU включенным, то будет иметь значение всегда устанавливать DF.

Не имеет смысла устанавливать / сбрасывать его для каждого пакета, потому что вы используете TCP и TCPработает с сегментами, а не с пакетами.Если вы хотите установить материал на уровне пакетов, вам нужно использовать протокол нижнего уровня.

0 голосов
/ 12 декабря 2010

Бит Don't Fragment обычно устанавливается на все пакеты TCP в любом случае.Вам не нужно делать ничего особенного, чтобы достичь этого.

...