当我想连续执行两次读取函数Address来检索服务器发送的所有数据时,我遇到了问题。
我读过一次,然后读到创建无限循环。
代码:
char buff[50] = {0};
nbytes = 1;
while (nbytes > 0)
{
nbytes = read(m_socket, buff, sizeof(buff));
}
<小时/>
为什么要阅读创建无限循环?不是“while”的问题。
感谢您的回答。
最佳答案
socket(2)
为您提供一个阻塞文件描述符,这意味着像 read(2)
这样的系统调用会阻塞,直到出现 足够一些可用数据来满足您的请求,或者发生流结束(对于 TCP)(返回值 0
),或者发生一些错误(返回值 -1
>).
这意味着您永远不会退出 while
循环,直到遇到错误或另一端关闭连接。
编辑0:
@EJP 很幸运地在这里纠正我,像往常一样 - read(2)
会阻塞,直到任何数据可用(不是您请求的全部内容,正如我最初那样)如上所述),包括流结束或错误。
关于C - Socket TCP - 带读取的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28000706/