На прикладном уровне (с использованием API стиля сокетов Беркли) вы просто смотрите часы и считываете или записываете данные со скоростью, которую вы хотите ограничить.
Если вы в среднем читаете только 10 кбит / с, но источник посылает больше, то в конечном итоге все буферы между ним и вами заполнятся. TCP / IP допускает это, и протокол организует замедление отправителя (на прикладном уровне, вероятно, все, что вам нужно знать, это то, что на другом конце блокирующие вызовы записи будут блокироваться, неблокирующие записи не будут работать и асинхронные запись не будет завершена, пока вы не прочитаете достаточно данных, чтобы это разрешить).
На прикладном уровне вы можете быть только приблизительными - вы не можете гарантировать жесткие ограничения, такие как «не более 10 КБ пройдет одну точку в сети за одну секунду». Но если вы отслеживаете то, что получили, вы можете получить среднее значение в долгосрочной перспективе.