2016-11-04 16 views
0

ラズベリーパイの小さなC++/c httpソケットサーバーを作成しました。これまでは、一度に1460データバイトしか送受信していませんでした。最近、私はこれ以上のものを送ることができるようになった。私はできるだけ早くサーバーからクライアントにデータを送信したいと思います。私はその量のデータを送信できるように、クライアントが処理できるウィンドウサイズ(最大セグメントサイズ)を取得できました。もしそれが8192だったら、その量を各サーバーソケットに送信したいと思います。どのように私にこれを行うにはいくつかのポインターを与えることができますか? TCP_MAXSEGとTCPソケットサーバーC++/cウィンドウサイズ

+1

'send()'ごとにできるだけ多くを送信してください。そのためにウィンドウサイズを知る必要はありません。 TCPが詳細を処理します。大規模なアプリケーションバッファ、たとえば32k以上を使用します。 – EJP

+0

@EJPと同意する - クライアントは受信したいバッファのサイズを要求する - ソケット通信は何が渡されるかを決定する – dbmitch

答えて

0

使用のgetsockopt:man tcpから

int mss; 
socklen_t len = sizeof mss; 
getsockopt(fd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len); 

TCP_MAXSEG 
     The maximum segment size for outgoing TCP packets. In Linux 2.2 
     and earlier, and in Linux 2.6.28 and later, if this option is 
     set before connection establishment, it also changes the MSS 
     value announced to the other end in the initial packet. Values 
     greater than the (eventual) interface MTU have no effect. TCP 
     will also impose its minimum and maximum bounds over the value 
     provided. 

this questionによると、これがなければ一般的なデフォルト、接続が確立され後に行うべきです値が返されます。

関連する問題