Linux - ioctl с FIONREAD всегда 0

Я пытаюсь узнать, сколько байтов доступно для чтения в моем TCP-сокете. Я вызываю ioctl с флагом «FIONREAD», который действительно должен дать мне это значение. Когда я вызываю функцию, я получаю return val 0 (т.е. нет ошибки), но также и мой целочисленный аргумент получает значение 0. Это не будет проблемой, но когда я вызываю метод recv (), я фактически считываю некоторые байты из сокета. Что я делаю не так?

// вот код:

char recBuffer[BUFFERLENGTH] = {0};
int bytesAv = 0;
int bytesRead = 0;
int flags = 0;
if ( ioctl (m_Socket,FIONREAD,&bytesAv) < 0 )
{
    // Error
}
if ( bytesAv < 1 )
{
    // No Data Available
}
bytesRead = recv(m_Socket,recBuffer,BUFFERLENGTH,flags);

Когда я вызываю функцию recv, я действительно читаю некоторые действительные данные (которые я ожидал)

11
задан Toby 8 August 2011 в 09:10
поделиться