2011-10-23 6 views

Odpowiedz

85

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).

+11

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 –

26

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 
+0

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

+0

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

-5

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).

+2

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

+0

@ 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. –

+0

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