На уровне TCP, да, ваш большой буфер будет разделен, когда он слишком велик, и будет объединен, когда он слишком мал.
На уровне приложения не позволяйте вашему приложению иметь дело с неограниченным размером буфера . На каком-то уровне вам нужно разделить их.
Если вы отправляете файл через сокет и, возможно, обрабатываете некоторые данные этого файла, например, сжимаете его. Затем вам нужно разделить это на куски. В противном случае вы будете использовать слишком много ОЗУ, когда в конечном итоге вы столкнетесь с большим файлом, и вашей программе не хватит ОЗУ.
RAM - не единственная проблема. Если ваш буфер становится слишком большим, вы можете потратить слишком много времени на чтение или обработку данных, и вы не будете использовать сокет, который находится там и ожидает данных. По этой причине лучше иметь параметр для размера буфера, чтобы вы могли определить значение, которое не является ни слишком маленьким, ни слишком большим.
Мое утверждение не в том, что сокет TCP не может обрабатывать большой кусок данных, он может, и я предлагаю использовать большие буферы при отправке для повышения эффективности. Я утверждаю, что просто не имею дело с неограниченным размером буфера в вашем приложении.