2012-11-18 38 views
0

我通過TCP套接字輸入的每一行使用fdopenfgets這樣的循環:在與fgets檢測EOF While循環

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

+2

如果'fgets'沒有返回'NULL',那麼緩衝區中就沒有'EOF'。 – md5

回答

3

如果套接字被關閉,您將只接收和結束套接字上的文件。

如果您需要在保持套接字打開的情況下停止閱讀,則需要爲此定義一個協議。

+0

如果*連接*被對等關閉*,您將只獲得EOS。* – EJP