2010-01-19 4 views

답변

28

기본값에서 값을 늘릴 수는 있지만 최대 값을 초과하여 값을 늘릴 수는 없습니다. SO_RCVBUF 옵션 변경 setsockopt을 사용하여이 휴대용 해결책이

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 
} 

참고; 수신 버퍼 크기를 증가시키기위한 POSIX 플랫폼에서 작동해야합니다. Linux는로드를 기준으로 수신 버퍼 크기를 자동으로 조정하는 현재 잠시 동안 autotuning을 가지고 있습니다 (2.6.7 이후 및 reasonable maximum buffer sizes부터 2.6.17까지). 자동 튜닝이있는 커널에서는 setsockopt을 사용하여 수신 버퍼 크기를 설정하지 않는 것이 좋습니다. 그러면 커널의 자동 튜닝이 비활성화됩니다. 그러나 다른 플랫폼에서는 setsockopt을 사용하여 버퍼 크기를 조정할 수 있습니다.

+0

단지 내가 찾고있는 것 : 작은 값으로 버퍼 크기를 지정하면 정적 일까? 아니면 트래픽 압력을 처리하기 위해 버퍼의 크기를 동적으로 조정할 것인가? –

+0

리눅스 TCP 자동 튜닝에 대한 답변을 조금 더 넓혔습니다. 리눅스에서 자동 튜닝이 활성화되면'setsockopt'를 사용하여 버퍼 크기를 조정하면 안됩니다. 그러나 다른 시스템에서는 여전히 원할 수 있습니다. –

+4

자동 튜닝은 TCP에만 적용되거나 TCP와 UDP 모두에 적용됩니까? – kumar