2010-12-11 8 views
4

私はTCP経由でファイル転送プログラムを書いています。 IP Mac OSで断片化しないでください

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

しかし IP_DONTFRAGは、Mac OS上で利用できていないようです:

は、私は、これは私が何をしたいのかであるソケットに

IP

上の断片化していないフラグを設定します。何か不足していますか?またはそれを正しく含めることを忘れましたか?事前に

おかげで、誰もが

--Sam

答えて

2

Googleが育て知っている場合は、この:Don't Fragmentビットは通常、とにかくすべてのTCPパケットに設定されているhttp://lists.apple.com/archives/macnetworkprog/2006/Jul/msg00014.html

+0

残念なことに、そのスレッドの次のメッセージでは、これはポスターが要求しているものではないRAWソケットでのみ機能することを示しています。http://lists.apple.com/archives/macnetworkprog/2006/Jul/msg00017 .html – NPE

+0

さて、私は今それを見る。ありがとう。次の応答はそれを行う他の方法がないかもしれないことを示します。 –

+0

私はそれを見ましたが、私は生のソケットを使わなくてもいいと思っていました。私はそれが可能でなければならないと思う理由は、私のネットワーク上でパケットを捕まえると、os x自身が使用するTCP mecanism上のデータ転送がそのフラグを持っているからです。私は彼らがスピードを上げるためにそれをしていると思っています、そして、それは私の現在の送っているmecanismに合っています。 – thewormsterror

0

。これを達成するために特別な作業を行う必要はありません。

1

DFビットは通常、TCP接続を持つオペレーティングシステムによって自動的にpath MTU (PMTU) discoveryに使用されます。何かあれば、PMTUディスカバリを無効にするためのソケットオプションがあります。これはDFを決して設定しないという効果があります(これはlinuxのIP_MTU_DISCOVERソケットオプションです)。 PMTUの検出をオンにしておくと、常にDFを設定するという効果があります。

TCPとTCPを使用しているため、パケット単位で設定/設定解除するのは意味がありません。パケットではなくセグメントで動作します。パケットレベルのものを設定する場合は、下位レイヤのプロトコルを使用する必要があります。

+0

VPNのような場合、つまりTCP-over-TCPの場合は当てはまりません – PnotNP

関連する問題