에 런타임에 수신 버퍼 크기를 지정, 다음 명령을 사용하여, UDP 말 런타임에 UDP 소켓 당 수신 버퍼 크기를 지정하여 시스템의 기본값을 재정의하는 응용 프로그램 (예 : c
)의 경우?하나는 시스템의 기본 네트워크 패킷에 대한 수신 버퍼 크기를 지정할 수 있습니다, UDP는 리눅스에서 리눅스
26
A
답변
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
을 사용하여 버퍼 크기를 조정할 수 있습니다.
단지 내가 찾고있는 것 : 작은 값으로 버퍼 크기를 지정하면 정적 일까? 아니면 트래픽 압력을 처리하기 위해 버퍼의 크기를 동적으로 조정할 것인가? –
리눅스 TCP 자동 튜닝에 대한 답변을 조금 더 넓혔습니다. 리눅스에서 자동 튜닝이 활성화되면'setsockopt'를 사용하여 버퍼 크기를 조정하면 안됩니다. 그러나 다른 시스템에서는 여전히 원할 수 있습니다. –
자동 튜닝은 TCP에만 적용되거나 TCP와 UDP 모두에 적용됩니까? – kumar