2010-01-19 16 views

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.

+0

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ı? –

+0

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. –

+4

otomatik ayarlama sadece TCP için geçerlidir veya hem TCP hem de UDP için geçerlidir? – kumar