在fgets While循环时检测EOF

时间:2012-11-18 18:23:10

标签: 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

1 个答案:

答案 0 :(得分:3)

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

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