1. Lisez le code, qui est plus précis
/* getsndrcv.c:
* getsockopt sample c code
* using getsockopt
* Get SO_SNDBUF & SO_RCVBUF Options:
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <assert.h>
/*
* This function reports the error and
* exits back to the shell:
*/
static void
displayError(const char *on_what) {
if ( errno != 0 ) {
fputs(strerror(errno),stderr);
fputs(": ",stderr);
}
fputs(on_what,stderr);
fputc('\n',stderr);
exit(1);
}
int main(int argc,char **argv) {
int z;
int s = -1; /* Socket */
int sndbuf=0; /* Send buffer size */
int rcvbuf=0; /* Receive buffer size */
socklen_t optlen; /* Option length */
/*
* Create a TDP/IP socket to use:
*/
s = socket(PF_INET,SOCK_STREAM,0);
/*s = socket(PF_INET,SOCK_DGRAM,0); udp使用本行代码*/
if ( s == -1 ) {
displayError("socket(2)");
}
/*
* Get socket option SO_SNDBUF:
*/
optlen = sizeof sndbuf;
z = getsockopt(s,
SOL_SOCKET,
SO_SNDBUF,
&sndbuf,&optlen);
if ( z ) {
displayError("getsockopt(s,SOL_SOCKET,"
"SO_SNDBUF)");
}
assert(optlen == sizeof sndbuf);
/*
* Get socket option SO_SNDBUF:
*/
optlen = sizeof rcvbuf;
z = getsockopt(s,
SOL_SOCKET,
SO_RCVBUF,
&rcvbuf,&optlen);
if ( z ) {
displayError("getsockopt(s,SOL_SOCKET,"
"SO_RCVBUF)");
}
assert(optlen == sizeof rcvbuf);
/*
* Report the buffer sizes:
*/
printf( "Socket s : %d\n",s);
printf( "Send buf: %d bytes\n", sndbuf);
printf( "Recv buf: %d bytes\n", rcvbuf);
close(s);
return 0;
}
/*
* OUTPUT
*
[sgupta@rhel54x64 socket]$ gcc getsndrcv.c -o getsndrcv
[sgupta@rhel54x64 socket]$ ./getsndrcv
Socket s : 3
Send buf: 16384 bytes
Recv buf: 87380 bytes
[sgupta@rhel54x64 socket]$
*/
2. vue tcp
# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 131072 //第一个表示最小值,第二个表示默认值,第三个表示最大值。
/proc/sys/net/ipv4/tcp_rmem
# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 174760
Le tampon d'envoi est de 16k par défaut et le tampon de réception est de 8k par défaut
vue UDP
# cat /proc/sys/net/core/rmem_default
212992
# cat /proc/sys/net/core/wmem_default
212992
Comme ci-dessus, les tampons d'envoi et de réception udp par défaut sont tous deux de 208k.
référence
https://blog.csdn.net/c359719435/article/details/8815499
https://blog.csdn.net/test1280/article/details/79776938