在fgets While循环时检测EOF

我使用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

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

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