Проверка алгоритма Nagle на открытом сокете

375
Medhat Hussain

Одна из используемых нами платформ открывает сокеты TCP (исходный код недоступен).

Мне нужно проверить, если алгоритм Nagle отключен или включен на этих сокетах.

Используемая операционная система может быть Windows или Linux, и мы знаем открытые порты.

Любые инструменты и идеи :)

0

1 ответ на вопрос

0
harrymc

Алгоритм Nagle setsockoptвключен по умолчанию, но может быть отключен в системном вызове с использованием флага TCP_NODELAY.

Один из способов в Linux - отследить setsockopt с помощью strace . Сетевая активность может быть отслежена с помощью вызова:

strace -o /tmp/strace.out -s 10000 -e trace=network -fp PID 

Это будет отслеживать вызовы bind, listen, socket, setsockopt.

Если ваш дистрибутив Linux включает в себя systemtap, вы можете использовать команду pfiles.stp .

Пример использования исходит из этого ответа :

$ ./pfiles.stp `pgrep udevd` 787: udevd Current rlimit: 32 file descriptors 0: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3 O_RDWR|O_LARGEFILE  /dev/null 1: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3 O_RDWR|O_LARGEFILE  /dev/null 2: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3 O_RDWR|O_LARGEFILE  /dev/null 3: S_IFDIR mode:0600 dev:0,9 ino:1 uid:0 gid:0 rdev:0,0 O_RDONLY  inotify 4: S_IFSOCK mode:0777 dev:0,4 ino:2353 uid:0 gid:0 rdev:0,0 O_RDWR  socket:[2353] SO_PASSCRED,SO_TYPE(2),SO_SNDBUF(111616),SO_RCVBUF(111616) sockname: AF_UNIX 5: S_IFSOCK mode:0777 dev:0,4 ino:2354 uid:0 gid:0 rdev:0,0 O_RDWR  socket:[2354] SO_TYPE(2),SO_SNDBUF(111616),SO_RCVBUF(33554432) ulocks: rcv 6: S_IFIFO mode:0600 dev:0,6 ino:2355 uid:0 gid:0 rdev:0,0 O_RDONLY|O_NONBLOCK  pipe:[2355] 7: S_IFIFO mode:0600 dev:0,6 ino:2355 uid:0 gid:0 rdev:0,0 O_WRONLY|O_NONBLOCK  pipe:[2355]