yılında zamanında tampon boyutunu almak belirtme aşağıdaki komutları kullanarak, UDP demek Bir uygulama için (örneğin, c
içinde), çalışma zamanında UDP soketi başına alma arabelleği boyutunu belirterek sistemin varsayılanlarını geçersiz kılmak için?bir sistemin varsayılan ağ paketleri için tampon boyutunu almak belirtebilir, UDP Linux Linux
26
A
cevap
28
Değeri varsayılan değerden artırabilirsiniz, ancak maksimum değerin üzerine çıkaramazsınız. SO_RCVBUF
seçeneği değiştirmek için setsockopt
kullanın: Bu taşınabilir bir çözüm olduğunu
int n = 1024 * 1024;
if (setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n)) == -1) {
// deal with failure, or ignore if you can live with the default size
}
Not; Alma arabelleği boyutunu arttırmak için herhangi bir POSIX platformunda çalışmalıdır. Linux, bir süredir bir süredir (2.6.7'den beri ve 2.6.17'den beri reasonable maximum buffer sizes ile), yüke göre alma arabelleği boyutunu otomatik olarak ayarlayan autotuning. Otomatik ayarlama özelliğine sahip çekirdeklerde, çekirdek arabelleği boyutunu ayarlayamayacağınız için, arabellek boyutunu setsockopt
kullanarak ayarlamanız önerilir. Bununla birlikte, arabellek boyutunu ayarlamak için setsockopt
kullanmak, yine de diğer platformlarda gerekli olabilir.
tam aradığım şey :) Ayrıca, arabellek boyutunu küçük bir değerle belirtirsem durağan olur mu? Veya sistem, varsa trafik basıncını ele almak için arabelleği dinamik olarak yeniden boyutlandıracak mı? –
Cevabımı Linux TCP otomatik ayarlamadan bahsetmek için biraz genişlettim; Linux'ta, otomatik ayarlama etkinse, muhtemelen 'setsockopt' kullanarak arabellek boyutunu ayarlamamalısınız; ama diğer sistemlerde hala isteyebilirsiniz. –
otomatik ayarlama sadece TCP için geçerlidir veya hem TCP hem de UDP için geçerlidir? – kumar