次のコードセグメントがどのように、そしてなぜ機能するのか理解できません。
/* Now lets try to set the send buffer size to 5000 bytes */
size = 5000;
err = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(int));
if (err != 0) {
printf("Unable to set send buffer size, continuing with default size\n");
}
送信バッファの値を確認すると、実際には5000 * 2 = 10000に正しく設定されています。ただし、送信バッファサイズを超えて送信しようとすると、すべてが送信されます。例えば:
n = send(sockfd, buf, 30000, 0);
/* Lets check how much us actually sent */
printf("No. of bytes sent is %d\n", n);
これにより、30000が出力されます。
これはどの程度正確に機能しましたか?送信バッファのサイズが10000に制限されていたという事実は効果がありませんでしたか?もしそうなら、正確には何が起こったのですか?ある種の断片化?
更新:ソケットが非ブロッキングモードの場合はどうなりますか?私は次のことを試しました:
- バッファサイズを10000(5000 * 2)に変更すると、16384バイトが送信されます
- バッファサイズを20000(10000 * 2)に変更すると、30000バイトが送信されます
もう一度、なぜですか?