Дрожание меньше затем 5 мс, вероятно, будет разбито любой ОС общего назначения (подсистема планирования) на конце соединения.
В общем дрожании ~10% RTT разумно, особенно долго, спорил, или ненадежные ссылки могут, очевидно, влиять на это.
От lsof FAQ (ищут, "Почему не делает lsof, сообщают об опциях сокета"), я полагаю, что Linux не делает информацию, Вы после доступны. (по крайней мере, не через/proc)
Если бы это сделало, то Вы могли бы использовать lsof -i <pid> -a -i tcp -T f
, но-T только берет "qs", не f на Linux. Можно получить некоторую другую информацию от netstat (netstat --tcp -p -o -e -e -v | grep <pid>
) который включает Отправить Очередь, и Примите Очередь и некоторую информацию о таймере.
То, что Вы могли сделать, использовать strace. Необходимо было бы или запустить программу через strace (strace -ff -e network,ioctl PROGRAM
) или прежде чем это настраивает сокет TCP (strace -fff -e network,ioctl -p PID
). ioctl
то, как те опции были бы установлены, и network
должен поймать достаточно для сообщения, каково соединения это. (но просто ioctl и затем используют lsof для выяснения, где соединения с должны работать, также),
Вы можете изменить размер буфера приема и отправки следующим образом (показан буфер отправки):
int buffersize = 64*1024; // 64k
setsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char *) &buffersize, sizeof(buffersize));
и для получения текущего размера используйте:
socklen_t buffersize_len = sizeof(buffersize); // in/out parameter
getsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char *) &buffersize, &buffersize_len);
Существует известная ошибка в Linux, который сообщает текущий размер буфера как 1/2 установленного значения. Я не могу вспомнить, составляет ли внутреннее значение половину запрошенного или отчет составляет половину того, что есть на самом деле.
Вы действительно можете сделать это, используя https://github.com/veithen/knetstat
.
Например. для nc -I 8192 -O 8192 www.google.com 80
это даст (см. SO_RCVBUF
и SO_SNDBUF
в третьей строке):
$ cat /proc/net/tcpstat
Recv-Q Send-Q Local Address Foreign Address Stat Diag Options
0 0 0.0.0.0:22 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_REUSEPORT=0,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 10.132.0.4:22 74.125.73.164:38922 ESTB SO_REUSEADDR=1,SO_REUSEPORT=0,SO_KEEPALIVE=1,TCP_NODELAY=1
0 0 10.132.0.4:44058 74.125.206.103:80 ESTB SO_REUSEADDR=0,SO_REUSEPORT=0,SO_KEEPALIVE=0,SO_RCVBUF=8192,SO_SNDBUF=8192,TCP_NODELAY=0
0 0 10.132.0.4:44054 74.125.206.103:80 TIMW
0 0 10.132.0.4:22 74.125.73.96:45722 ESTB SO_REUSEADDR=1,SO_REUSEPORT=0,SO_KEEPALIVE=1,TCP_NODELAY=1