受信機が 1 つだけのネットワークを調整しようとしています。
まず、次の方法で SO_SNDBUF のサイズを検出します。
getsockopt(sendsockfd, SOL_SOCKET, SO_SNDBUF, &sndBufferSize, &sbsLen);
次に、次のようにして完全にいっぱいになるまで、このバッファーをいっぱいにし続けます。
if (sndBufferSize - NbBytesInBuffer >= HEADER){
memcpy (sendBuffer + NbBytesInBuffer, &buf_header, HEADER);
NbBytesInBuffer +=HEADER;
}
もちろん、コードの関連部分だけを言及しています。
最後に、バッファがいっぱいになったら、ソケットに書き込みます。
if (sndBufferSize - NbBytesInBuffer < HEADER)
sentSize = write(sendsockfd,sendBuffer,NbBytesInBuffer);
...
私の問題はまだ言及されていません。上記のものはすべて、データを再送信するまで完全に機能しています。
ここで、可能な限り最大の速度で送信したいので、待機時間をできるだけ短くする必要があります。(つまり、送信バッファが空になるとすぐに再送信する必要があります)。
write()
(最も最適な方法で) 送信バッファを再度空にするために必要な時間を検出する方法は?
PS任意の時間待つように言わないでください(たとえばusleep(10000);
)