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 |
2015년 5월 3일 일요일
UDP와 TCP 소켓의 SND/RCV 버퍼 크기 보기
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기