Qual è la dimensione del buffer del socket predefinita di linux? C'è qualche comando per vederlo?Come trovare la dimensione del buffer del socket di linux
risposta
Se volete vedere la vostra dimensione del buffer nel terminale, è possibile dare un'occhiata a:
/proc/sys/net/ipv4/tcp_rmem
(per la lettura)/proc/sys/net/ipv4/tcp_wmem
(per la scrittura)
Contengono tre numeri , che sono i valori minimi, predefiniti e massimi della memoria (in byte), rispettivamente.
Per ottenere la dimensione del buffer in C/C++ programma che segue è il flusso
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
È sicuro chiamare invece 'socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) '? Sto usando questa chiamata C nel mio framework Swift TCP per ottenere la dimensione del buffer per ridurre le chiamate 'recv'. – DevAndArtist
Nota: questa è anche solo la dimensione del buffer di lettura, utilizzare SO_SNDBUF per ottenere la dimensione del buffer di scrittura. Sotto almeno linux, puoi usare ioctl SIOCINQ e SIOCOUTQ, per ottenere rispettosamente lo stato corrente usato del buffer. – Rahly
dimensione atomica è 4096 byte, formato massimo è 65536 byte. Sendfile utilizza 16 pipe ciascuna di 4096 byte di dimensione. cmd: ioctl (fd, FIONREAD, & buff_size).
Che cosa significa "dimensione atomica"? cosa c'entra "sendfile()" con esso; e dove hai risposto alla domanda sulla dimensione del buffer del socket di default? – EJP
@ EJP Dimensione atomica - Assi interni Linux per trasferimento socket 4096b - MT-safe, mutex, pipe interne 1/16. il sandfile ha molto a che fare con questo. Penso di avere. La dimensione del buffer predefinita è 16 * 4096b. –
Nessuno di questi risponde alla domanda. Riguarda il socket invia e riceve le dimensioni del buffer. Non riguardo 'sendfile()', che quindi non ha * niente * a che fare con esso, né nemmeno le dimensioni di trasferimento atomico, idem. – EJP
C'è anche '/ proc/sys/net/core/rmem_default' per recv e'/proc/sys/net/core/wmem_default' per l'invio, come indicato http://man7.org/linux/man- pages/man7/socket.7.html –