gpt4 book ai didi

sockets - Linux - 带有 FIONREAD 的 ioctl 始终为 0

转载 作者:行者123 更新时间:2023-12-04 01:35:33 25 4
gpt4 key购买 nike

我想知道我的 TCP 套接字中有多少字节可读。我正在使用标志“FIONREAD”调用 ioctl,它实际上应该给我这个值。
当我调用该函数时,我得到 return val 0 (所以没有 Error ),但我的整数参数也得到值 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 函数时,我实际上读取了一些有效数据(这是我所期望的)

最佳答案

它发生得非常快,这就是为什么你什么也看不见。你在做什么:

  • ioctl : 有资料给我吗?不,还没有
  • recv : 阻塞直到有数据给我。一些(短)时间后:这是您的数据

  • 所以如果你真的想看 FIONREAD ,就等着吧。
    /* Try FIONREAD until we get *something* or ioctl fails. */
    while (!bytesAv && ioctl (m_Socket,FIONREAD,&bytesAv) >= 0)
    sleep(1);

    关于sockets - Linux - 带有 FIONREAD 的 ioctl 始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979769/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com