리눅스의 소켓 버퍼 크기를 찾는 방법
Linux의 기본 소켓 버퍼 크기는 얼마입니까? 그것을 보라는 명령이 있습니까?
터미널에서 버퍼 크기를 확인하려면 다음을 살펴볼 수 있습니다.
/proc/sys/net/ipv4/tcp_rmem
(읽기 용)/proc/sys/net/ipv4/tcp_wmem
(쓰기 용)
여기에는 각각 최소, 기본 및 최대 메모리 크기 값 (바이트) 인 세 개의 숫자가 포함됩니다.
c / c ++ 프로그램에서 버퍼 크기를 얻으려면 다음은 흐름입니다.
int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size
지적했듯이에서 현재 기본 소켓 버퍼 크기 를 볼 /proc
수 sysctl
있지만을 사용하여 확인할 수도 있습니다 . (참고 : 이름에 ipv4가 포함되어 있지만 이러한 크기는 ipv6 소켓에도 적용됩니다. 코드는 ipv4 tcp_init_sock () 함수를 호출합니다.)
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
그러나 기본 소켓 버퍼는 양말이 초기화 될 때 설정되지만 커널은 동적으로 크기를 조정합니다 (SO_SNDBUF와 함께 setsockopt ()를 사용하여 설정하지 않는 한). 현재 열려있는 소켓에 대한 버퍼의 실제 크기는 ss
명령 ( iproute
패키지의 일부)을 사용하여 검사 할 수 있으며 , 이는 또한 혼잡 제어 매개 변수 등과 같은 소켓에 대한 더 많은 정보를 제공 할 수 있습니다. 예를 들어 현재 열려있는 TCP ( t
옵션) 소켓 을 나열하려면 및 관련 메모리 ( m
) 정보 :
ss -tm
다음은 몇 가지 출력 예입니다.
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.56.102:ssh 192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)
다음은 skmem (소켓 메모리)에 대한 간략한 설명입니다. 더 많은 정보를 얻으 려면 커널 소스 (예 : sock.h ) 를 살펴 봐야합니다 .
r:sk_rmem_alloc rb:sk_rcvbuf # current receive buffer size t:sk_wmem_alloc tb:sk_sndbuf # current transmit buffer size f:sk_forward_alloc w:sk_wmem_queued # persistent transmit queue size o:sk_omem_alloc bl:sk_backlog d:sk_drops
원자 크기는 4096 바이트, 최대 크기는 65536 바이트입니다. Sendfile은 각각 4096 바이트 크기의 16 개 파이프를 사용합니다. cmd : ioctl (fd, FIONREAD, & buff_size).
참조 URL : https://stackoverflow.com/questions/7865069/how-to-find-the-socket-buffer-size-of-linux
'programing' 카테고리의 다른 글
git-add 동안 절대 파일 경로 지정을 피하는 방법 (0) | 2021.01.18 |
---|---|
모든 텍스트에 대해 Android 앱에서 텍스트 색상을 설정하는 방법은 무엇입니까? (0) | 2021.01.18 |
Eclipse에 "기존 파일 추가"(프로젝트에)와 동일한 기능이 있습니까? (0) | 2021.01.18 |
Chrome에서 1px 이동을 일으키는 CSS3 변환 회전 (0) | 2021.01.18 |
font-awesome이 localhost에서는 작동하지만 웹에서는 작동하지 않는 이유는 무엇입니까? (0) | 2021.01.18 |