C - Socket TCP - 带读取的无限循环

标签 c sockets loops tcp

当我想连续执行两次读取函数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/

相关文章:

无法理解函数输出 (C)

c - C中数组的递归函数

c - while 循环中的 getchar() 问题

java - 如何为 Spring Boot 中 SolrHealthIndicator 使用的 SolrClient 设置连接超时和 soTimeout?

python - 为什么 print() 在 Visual Studio Code 中不起作用?

mysql - 这样的mysql rpm是什么意思

java - 为什么不创建单独的线程?

PHPCrawl 无法创建 SSL 套接字

java - 循环验证

javascript - React - 使用循环创建嵌套组件