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

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

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

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

1 ответ1

0

Алгоритм 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]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .