WindowsでTCPを使って小さなメッセージ(20byte程度)をたくさん送信しようとしています。受信側ではできるだけ待つことなく即時にメッセージを受けたいのですが、実際にやってみると、ある程度の数(50メッセージほど)がまとまらないと受信しないようです。setsockopt()関数を使って受信バッファのサイズを小さくしてみたのですが状況は変わりません。
int sndbufsz = 32;
setsockopt(nSd, SOL_SOCKET, SO_SNDBUF, (char*)&sndbufsz, sizeof(sndbufsz));
どなたかよい方法をご存知でしたらご教示願います。
まずは,
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#nagle-desc
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermediate.html#disable-nagle
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html#item19
を熟読してください。
その上で,結論。
setscokoptでTCP_NODELAYをTRUEに設定してやれば,まとめて送信しないようにできます。
http://windowssdk.msdn.microsoft.com/en-us/library/ms740476.aspx
ありがとうございました。TCP_NODELEYが効果ありました。パケットモニタで観測したところ、送信はメッセージ単位に送ることができるようになりました。あとは受信側で工夫してみます。
ツイート | ![]() |