2010-12-11 53 views
4

J'écris un programme de transfert de fichiers sur TCP.IP Ne pas fragmenter le bit sous Mac OS

Je veux régler le pas fragmenter drapeau sur IP

Sur une prise ce que je veux faire:

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

Cependant IP_DONTFRAG ne semble pas disponible sur Mac OS. Est-ce que je manque quelque chose? ou ai-je oublié de l'inclure correctement?

Merci à l'avance si quelqu'un sait

--Sam

Répondre

2
+0

Malheureusement, le message suivant dans ce fil indique que cela fonctionne uniquement avec les sockets RAW, ce qui n'est pas ce que l'affiche demande: http://lists.apple.com/archives/macnetworkprog/2006/Jul/msg00017 .html – NPE

+0

droite, je vois ça maintenant. Merci. mais la réponse suivante indique qu'il n'y a peut-être pas d'autre moyen de le faire. –

+0

J'ai vu ça mais j'espérais éviter d'avoir à utiliser des douilles crues. Je pense que cela doit être possible parce que lorsque j'attrape des paquets sur mon réseau, le transfert de données sur le mécanisme de tcp utilisé par osx lui-même est activé. Je suppose qu'ils font ça pour gagner de la vitesse et que ça conviendrait à mon mécanisme d'envoi actuel. – thewormsterror

0

Le bit Don't Fragment est généralement défini sur tous les paquets TCP de toute façon. Vous n'avez pas à faire de spécial pour y parvenir.

1

Le bit DF est généralement utilisé pour path MTU (PMTU) discovery automatiquement par le système d'exploitation avec des connexions TCP. Si quelque chose, vous pouvez avoir une option de socket pour désactiver la découverte PMTU qui aura pour effet de ne jamais définir DF (c'est l'option de socket IP_MTU_DISCOVER sur Linux). Si vous laissez la découverte PMTU activée, cela aura pour effet de toujours définir DF.

Il ne serait pas logique de définir/désactualiser paquet par paquet car vous utilisez TCP et TCP fonctionne sur des segments, pas sur des paquets. Si vous souhaitez définir des éléments au niveau des paquets, vous devez utiliser un protocole de couche inférieure.

+0

Cela n'est pas vrai pour les cas tels que VPN, c'est-à-dire TCP-sur-TCP – PnotNP