Linux Sockets, как получить количество байтов / пакетов в отправляющем буфере?

linux sockets network-programming

2175 просмотра

1 ответ

51 Репутация автора

Я работаю над простым сетевым приложением под Linux, где мне нужно прочитать следующие два свойства:

  1. Количество байтов в буфере приема, которые готовы к чтению.
  2. Количество байтов в буфере отправки сокета, которое еще не было отправлено.

Буфер приема (1-е свойство) можно получить с помощью опции FIONREAD функции ioctl (). Но для второго свойства (байтов # в буфере отправки) я не уверен, как я могу это прочитать. Я попробовал опцию SO_SNDBUF в функции getsockopt (), но оказалось, что это максимальный размер буфера отправки, а не текущий размер данных в буфере отправки.

Есть мысли или предложения?

Автор: hanvari Источник Размещён: 13.07.2016 06:31

Ответы (1)


4 плюса

51 Репутация автора

Решение

Вот как получить,

  1. Длина данных в буфере приема, которые еще не прочитаны:

    ioctl( socket_descriptor, FIONREAD, &size );  // alternative 1
    ioctl( socket_descriptor, SIOCINQ, &size );   // alternative 2
    
  2. Длина данных в буфере отправки, которая еще не очищена (либо еще не отправлена, либо отправлена, но не подтверждена получателем):

    ioctl( socket_descriptor, TIOCOUTQ, &size );  // alternative 1
    ioctl( socket_descriptor, SIOCOUTQ, &size );  // alternative 2
    

Ссылка: http://linux.die.net/man/7/tcp

Автор: hanvari Размещён: 28.07.2016 05:33
Вопросы из категории :
32x32