Jaki jest domyślny rozmiar bufora gniazda dla systemu Linux? Czy jest jakieś polecenie, żeby to zobaczyć?Jak znaleźć rozmiar bufora gniazda linux
Odpowiedz
Jeśli chcesz zobaczyć swój rozmiar bufora w terminalu, można spojrzeć na:
/proc/sys/net/ipv4/tcp_rmem
(do odczytu)/proc/sys/net/ipv4/tcp_wmem
(do zapisu)
Zawierają one trzy numery , które są wartościami minimalnymi, domyślnymi i maksymalnymi wielkościami pamięci (w bajtach).
Dla uzyskania rozmiaru bufora C/C++ programu po to przepływ
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
Czy można bezpiecznie wywoływać 'socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)'? Używam tego wywołania C w mojej strukturze Swift TCP, aby uzyskać rozmiar bufora w celu zmniejszenia wywołań "recv". – DevAndArtist
Uwaga: jest to również tylko rozmiar bufora odczytu, użyj SO_SNDBUF, aby uzyskać rozmiar bufora zapisu. Pod co najmniej linuxem możesz użyć ioctl SIOCINQ i SIOCOUTQ, aby z szacunkiem pobrać aktualny stan bufora. – Rahly
wielkość Atomic 4096 bajtów, maksymalna wielkość wynosi 65536 bajtów. Sendfile używa 16 rur o rozmiarze 4096 bajtów. cmd: ioctl (fd, FIONREAD, & buff_size).
Co oznacza "rozmiar atomowy"; co ma z tym wspólnego "sendfile()"; i gdzie odpowiedziałeś na pytanie dotyczące domyślnego rozmiaru bufora gniazda? – EJP
@ EJP Atomic size - Wewnętrzny system Linux zapewnia transmisję gniazda 4096b - bezpieczny dla MT, mutex, 1/16 wewnętrznych przewodów. sandfile ma z tym wiele wspólnego. Myślę, że mam. Domyślny rozmiar bufora to 16 * 4096b. –
Nic z tego nie odpowiada na pytanie. Dotyczy rozmiarów bufora wysyłania i odbierania. Nie chodzi o 'sendfile()', który w związku z tym ma * nic * z tym zrobić, ani wielkości transferu atomowego, tak, tak. – EJP
Istnieje również '/ proc/sys/net/core/rmem_default' dla recv i'/proc/sys/net/core/wmem_default' dla wysyłania, zgodnie z odnośnikiem http://man7.org/linux/man- pages/man7/socket.7.html –