c - 在 fgets While 循环中检测 EOF

标签 c sockets inputstream eof fgets

我正在使用 fdopenfgets 遍历 TCP 套接字输入的每一行,如下所示:

int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
FILE *f;
char line[1024];

f = fdopen(connfd, "a+");
while(fgets(line, sizeof(line), f) != NULL) {
    printf("%s", line);
}

printf("EOF");
fclose(f);

问题是它看起来像 fgets 由于某些奇怪的原因永远不会返回 NULL。还有其他方法可以检查 EOF 吗?

最佳答案

如果套接字关闭,您只会在套接字上接收和结束文件。

如果您需要在保持套接字打开的同时停止读取,则需要为此定义一个协议(protocol)。

关于c - 在 fgets While 循环中检测 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443122/

相关文章:

php - fsockopen() : unable to connect not work with PHP (Connection timed out)

c++ - 如何从文件中读取某些字符串?在 C++ 中丢弃我不想要的那些

C printf 函数数据格式

c++ - 二进制协议(protocol) - 字节交换技巧

c - 在动态数组上使用 strcpy

c++ - closesocket() 未完成 IOCP 的挂起操作

.net - 为什么我的客户端套接字收不到服务器套接字发送的内容?

java - Android 上网抛出 IOException

java - InputStream 缓冲数据

c++ - 在 C/C++ 的 ODBC 程序中找不到 SQL.H 和 SQLEXT.H