한계는 변수 sysctl_wmem_default
에서옵니다. 이것은 proc 파일 시스템에서 볼 수 있습니다 : /proc/sys/net/core/wmem_max
다른 Linux 버전은이 시점에서 다른 구현을 가질 수 있습니다. 그러나 UNIX 도메인 소켓에 대한 이런 종류의 코드가있다 :
sk->sk_sndbuf = sysctl_wmem_default;
및
err = -EMSGSIZE;
if (len > sk->sk_sndbuf - 32)
goto out;
그래서 실제 제한이 있습니다 :/proc 디렉토리/sys 인/인터넷/코어/wmem_max 마이너스 32의 값은 . 버전간에이 마법 번호가 얼마나 많이 변경되는지 모르겠습니다. /proc/sys/net/core/wmem_max 값은 사용 가능한 램 페이지에 따라 달라질 수 있습니다.
내 리눅스 박스에서 값은 105472입니다. 최대 데이터 그램 크기 (AF_UNIX와 SOCK_DGRAM을 사용할 때)는 105440입니다. 크기가 105441 인 메시지를 보내려고하면 EMSGSIZE와 함께 실패합니다.
출처
2011-11-22 13:20:48
SKi
가능한 중복 [리눅스에서 보낼 수있는 AF_UNIX 데이터 그램 메시지의 최대 크기는 무엇입니까?] (http://stackoverflow.com/questions/4729315/what-is-the-max-size-of-af -unix-data-messages-sent-in-linux) –
아니요, 그 질문은 "실제로 최대 크기가 130688입니까? 그렇지 않다면 커널을 다시 컴파일하지 않고 변경할 수 있습니까?" 하지만 C 프로그램 내에서 최대 크기를 찾아야하므로 값을 변경할 필요가 없으며 프로그램에 130688과 같은 마술 번호를 하드 코드하고 싶지 않습니다. – grungegurunge