2015년 5월 3일 일요일

UDP와 TCP 소켓의 SND/RCV 버퍼 크기 보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
void error_handle( char * msg);
int main(int argc, char * argv[] )
{
    int sock_tcp;
    int sock_udp;
    int option;
    socklen_t length; // sys/types.h
    sock_tcp = socket( PF_INET, SOCK_STREAM, 0 );
    if( sock_tcp == -1 )
        error_handle( "socket error()" );
    sock_udp = socket( PF_INET, SOCK_DGRAM, 0 );
    if( sock_udp == -1 )
        error_handle( "scoket error()" );
    length = sizeof( option );
    if( getsockopt( sock_tcp, SOL_SOCKET, SO_SNDBUF, (void*) &option, &length ) == -1 )
        error_handle( "getsockopt() error" );
    printf"tcp send    buffer size : %d\n", option );
    length = sizeof( option );
    if( getsockopt( sock_tcp, SOL_SOCKET, SO_RCVBUF, (void*) &option, &length ) == -1 )
        error_handle( "getsockopt() error" );
    printf"tcp receive buffer size : %d\n", option );
    length = sizeof( option );
    if( getsockopt( sock_udp, SOL_SOCKET, SO_SNDBUF, (void*) &option, &length ) == -1 )
        error_handle( "getsockopt() error" );
    printf"udp send    buffer size : %d\n", option );
    length = sizeof( option );
    if( getsockopt( sock_udp, SOL_SOCKET, SO_RCVBUF, (void*) &option, &length ) == -1 )
        error_handle( "getsockopt() error" );
    printf"udp receive buffer size : %d\n", option );
    close (sock_tcp);
    close (sock_udp);
    return 0;
}
void error_handle( char * msg )
{
    fprintf( stderr, "%s\n", msg );
    fprintf( stderr, "errno number : %d\n", errno );
    fprintf( stderr, "errno message: %s\n", strerror( errno ) );
    exit(1);
}


위와 같은 코드를 사용해서,
UDP와 TCP 소켓의 send buffer 와 receive buffer 크기를 살펴보니,
기본적으로 다르게 설정되어 있음을 알았다.


이를 실행하면,

tcp send buffer size : 16384
tcp receive buffer size : 87380
udp send buffer size : 112640
udp receive buffer size : 112640
이 나왔다.

Linux 에서 기본 설정하는 TCP SND/RCV 버퍼 크기는
sysctl -n net.ipv4.tcp_wmem ( SND 크기 )
sysctl -n net.ipv4.tcp_rmem ( RCV 크기 )
명령어로 확인할 수 있다.


UDP 의 경우 아래로 확인하면 될 것 같다.
sysctl -n net.core.wmem_default sysctl -n net.core.rmem_default


https://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php

cs

댓글 없음:

댓글 쓰기

팔로어