Linux 소켓이 지원하는 최대 크기를 쉽게 찾을 수 있는 방법이 있는지 궁금합니다. (이것이 구성 가능합니까? 그렇다면 어디에서?)
예를 들어, 웹에서 발견된 대부분의 소켓 예제는 "Hello Socket" 또는 다른 작은 문자열을 전송하지만, 전체를 변경하면전쟁과 평화소켓에 꽂으면 언제 부러지나요?
모든 것이 파일이므로 최대 파일 크기는 얼마입니까? 다른 파일 시스템에 연결할 때 소켓은 어떻게 조정됩니까?
저는 스트리밍 소켓에 가장 관심이 많습니다.
답변1
어떤 유형의 소켓인지 말하지 않았습니다.
스트림 소켓
정의에 따라 무제한의 데이터를 보낼 수 있습니다. 한 번에 모두 버퍼링하거나 전송할 수 없거나 수신자가 모든 데이터를 한 번에 수신할 수 없는 경우 전송은 차단되거나(블로킹 소켓의 경우) 부분적으로 쓰여진 바이트 수를 반환하거나 EAGAIN
(비블로킹 소켓의 경우) 반환됩니다.
데이터그램 소켓
이는 계약에 따라 다릅니다. UDPv4는 데이터그램당 65536바이트만 지원합니다. UDPv6은 더 많은 것을 지원합니다. UNIX 도메인 소켓은 더 많은 것을 지원할 수 있습니다. 이 경우 단순히 메모리에 의해 제한될 수 있습니다.
답변2
net.core.rmem_max
그것은 net.core.wmem_max
당신의 사업입니다. 그 값을 확인할 수 있습니다.
# sysctl net.core.rmem_max
그리고 그것들을
# sysctl -w net.core.rmem_max=8388608
각각 수신 및 송신 시 소켓 버퍼 크기입니다. 또한 기본값은 - rmem_default
및 입니다 wmem_default
.