c - fread 在 socket 上停滞但 get 没有?

标签 c sockets proxy

我正在使用 c 编写代理服务器。我在不同的地方结合使用 fread 和 fgets 已经走得很远了,但我想调和并理解其中的区别。在下面的示例中,我尝试在我以前成功使用 fget 的地方使用 fread。相反,我的服务器现在卡在 fread 线上。有什么区别,为什么我的程序会挂起?

void HandleTCPClient(int clntSocket)
{
    FILE *request = fdopen(clntSocket, "r");
    char reader[2000];
    size_t q; //typo before
    while((q=fread(reader, 1, sizeof(reader), request))>0) {  //hangs here!
        printf("i read something!\n");
    }
    return;
}

谢谢!!

编辑:所以如果我将行“while((q=fread(reader, 1, 1, request))>0) {”

我的屏幕上到处都是“我读了一些东西”...

不知道这是什么意思。那么,如果流中的字符数少于您缓冲区的大小,fread 将不执行任何操作是否正确?

最佳答案

fgets 在读取换行符时返回,而 fread 将阻塞,直到请求的字节数在流中或 EOF 上可用。在您的情况下,调用会阻塞,因为您没有在流中准备好 2000 字节的数据。

关于c - fread 在 socket 上停滞但 get 没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008977/

相关文章:

c++ - 在结构中使用 typedef 来命名和索引文本命令

无法释放从函数返回的 typedef 结构

c# - 在 Windows 中监听端口是否比在 Linux 中慢?

c# - 套接字连接在我读取数据之前重置

python - Jupyterhub 错误 503 : Proxy Target Missing

代码因段错误而失败

c - C 中追加和清除字符串

Linux 中 C/Socket 编程中的聊天室

python - 不断循环,无法弄清楚出了什么问题

python - 在 urllib3 中使用 HTTPS 代理时,为什么我会看到 InvalidProxyConfigurationWarning?