TCPの送信サイズを小さくするには?

解決


ino  2006-07-05 06:43:37  No: 62421

WindowsでTCPを使って小さなメッセージ(20byte程度)をたくさん送信しようとしています。受信側ではできるだけ待つことなく即時にメッセージを受けたいのですが、実際にやってみると、ある程度の数(50メッセージほど)がまとまらないと受信しないようです。setsockopt()関数を使って受信バッファのサイズを小さくしてみたのですが状況は変わりません。

int sndbufsz = 32;
setsockopt(nSd, SOL_SOCKET, SO_SNDBUF, (char*)&sndbufsz, sizeof(sndbufsz));

どなたかよい方法をご存知でしたらご教示願います。


YuO  2006-07-05 07:17:19  No: 62422

まずは,
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


ino  2006-07-08 00:14:16  No: 62423

ありがとうございました。TCP_NODELEYが効果ありました。パケットモニタで観測したところ、送信はメッセージ単位に送ることができるようになりました。あとは受信側で工夫してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加